C#多形式变量
本文关键字:变量 多形式 | 更新日期: 2023-09-27 17:57:47
我有一个包含大部分功能的主窗体。我只是想知道如何将一个变量从弹出窗体传递到该主窗体。
例如:
我有一个主表单,需要一些连接信息。因此,当你点击"输入连接信息"按钮时,它会打开一个新的表单,用户可以键入他想用于连接的IP地址。
在这个新表单上,我有一个文本框和一个按钮,一旦你输入信息,它就会关闭并将包含ip的字符串传递回原始表单
有什么建议吗?你认为有比使用windows窗体更好的方法来实现这一点吗?我现在对这个问题很困惑。
将文本框文本公开为公共只读属性。将连接表单显示为对话框,当它关闭时,从属性获取连接,然后处理表单:
在打开的表单处理程序(按钮点击,菜单,任何)
string connectionString = null;
using (ConnectionForm form = new ConnectionForm())
{
DialogResult result = form.ShowDialog();
if (result == DialogResult.Ok)
connectionString = form.ConnectionString
}
在您的连接形式:
public class ConnectionForm: Form
{
....
public string ConnectionString { get { return textBox1.Text; } }
}
您可以在主窗体中创建一个公共属性,并在弹出式构造函数中传递主窗体实例。通过这种方式,您可以更改主窗体属性。
您也可以在弹出窗体中创建一个事件,并将其挂接到主窗体中。
我喜欢使用类似这样的模式(请记住,c#不是我的第一语言):
public class ValueForm: Form
{
public static string GetFromUser(string originalValue)
{
using (ConnectionForm form = new ConnectionForm())
{
form.TheValue = originalValue;
var result = form.ShowDialog();
if (result == DialogResult.Ok)
return form.TheValue;
else
return originalValue;
}
}
public string TheValue {
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
/* also some code behind your OK & cancel buttons to set
DialogResult appropriately,
and do any validation that you need to do
*/
}
然后你会像这样使用:
string newValue = ValueForm.GetFromUser(oldValue);
引用将对话框窗体上的控件绑定到父窗体的属性。
public dlgDbConnProps ( Form Owner )
{
// TODO: Complete member initialization
InitializeComponent ( );
owner = Owner;
}
private void cbo_ProviderLst_SelectedIndexChanged ( object sender, EventArgs e )
{
owner.Provider = cboLst.Text;
}
这里是我实现的另一种方法:
。。。将Func传递给子窗体构造函数:
public dlgRequestLogin ( Func<string, string, bool> LoginMethod )
{
InitializeComponent ( );
p_loginMethod = LoginMethod;
}
。。。然后处理按钮点击(或其他适当的事件):
private void cmd_SendLoginCredentials_Click ( object sender, EventArgs e )
{
bool res = p_loginMethod.Invoke ( txt_UserID.Text, txt_UserPassword.Text );
}