使用Windows窗体传递对象

时间:2013-07-15 13:59:46

标签: c# winforms

我的问题是我正在开发一个小应用程序来在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;
        }
    }

1 个答案:

答案 0 :(得分: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();
}