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