如何解决C#多格式变量?
| 我有一个具有大多数功能的主窗体。我只是想知道如何将变量从弹出形式传递到主要形式。 例如: 我的主要表单需要一些连接信息。因此,当您单击按钮“输入连接信息”时,它将打开一个新表单,用户可以键入要用于其连接的IP地址。 在这个新表单上,我有一个文本框和一个按钮,一旦输入信息,它应该关闭并将包含ip的字符串传递回原始表单。 有什么建议么?您是否认为有比使用Windows窗体更好的方法,而只是继续使用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 );
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。