使用windows窗体传递对象

本文关键字:对象 窗体 windows 使用 | 更新日期: 2023-09-27 18:22:26

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

使用windows窗体传递对象

一种常见的方法是让你的主窗体上有你的所有选项。当窗体加载时,你启动登录窗体(通常在主窗体的构造函数或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();
}