0

我的问题是我正在开发一个小型应用程序来在 SCCM 2012 服务器上执行一些操作。

目前它只是创建、删除和移动文件夹。

我想要做的是有一个你登录的表格。这已经完成了。从这里您应该选择您想要执行的操作类型(例如,移动或删除)。然后应该会弹出一个新表单,您可以在这里施展魔法。

这一切都完美无缺,但是,我认为我没有以“正确”的方式进行操作。现在,我将连接对象传递给所有创建的表单的构造函数,并且表单是在彼此内部创建的。是否有意义?

我想做的是有某种控制类,我从那里创建登录表单,决定是否应该隐藏或显示它,然后将连接对象传递到我希望它去的地方,当它有被退回/保存。

我的问题是,当我创建表单时,所有控制流都转到该表单。如果我可以将流程保留在控制类中,我会更喜欢,并从这里控制表单是否根据成功登录隐藏/显示。

我希望你能理解我的问题,并可能有解决方案?

这是form1的代码片段:

 public Form1()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        userName = textBox1.Text;
        password = textBox2.Text;

       getConnection = Connect(COMPUTER, userName, password);

       if (connection != null)
       {
           Form2 form2 = new Form2(connection);
           form2.Show();
           this.Hide();
       }
    }
    public WqlConnectionManager Connect(string serverName, string userName, string userPassword)
    {
        try
        {
            SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary();
            WqlConnectionManager connection = new WqlConnectionManager(namedValues);

            if (System.Net.Dns.GetHostName().ToUpper() == serverName.ToUpper())
            {
                // Connect to local computer.
                connection.Connect(serverName);
            }
            else
            {
                // Connect to remote computer.
                connection.Connect(serverName, userName, userPassword);
            }

            return connection;
        }
        catch (SmsException e)
        {
            MessageBox.Show("Failed to connect. Error: " + e.Message);
            return null;
        }
        catch (UnauthorizedAccessException e)
        {
            MessageBox.Show("Failed to authenticate. Error: " + e.Message);
            return null;
        }
    }
4

1 回答 1

0

做你想做的事情的一种常见方法是让你的主窗体上有你所有的选项。当表单加载时,您启动登录表单(通常在主表单的构造函数或 OnShow 方法中)。如果登录失败,则调用 Application.Exit()。否则,您继续主窗体。本质上,主要形式您的控制器。

下面是我的意思的一个非常简单的示例..

public Form1()
{
    InitializeComponent();

    LoginForm loginForm = new LoginForm();
    DialogResult result = loginForm.ShowDialog();
    if (result != System.Windows.Forms.DialogResult.OK)
        Application.Exit();
}

private void CreateButton_Click(object sender, EventArgs e)
{
    CreateForm createForm = new CreateForm();
    createForm.Show();
}

private void DeleteButton_Click(object sender, EventArgs e)
{
    DeleteForm deleteForm = new DeleteForm();
    deleteForm.Show();
}

private void MoveButton_Click(object sender, EventArgs e)
{
    MoveForm moveForm = new MoveForm();
    moveForm.Show();
}
于 2013-07-15T14:36:08.140 回答