我有一个Windows窗体,允许不同的用户控件显示并被不同的按钮隐藏。
我希望这个用户控件能够直接相互通信并更改值等。
例如下面的usercontrol1
用户将填写表单,然后当他们单击继续时,usercontrol1应该关闭,usercontrol2现在应该可见,选择的用户信息显示如下
到目前为止,我有以下代码
private void btnProceed_Click(object sender, EventArgs e)
{
string name = tbName.ToString();
string email = tbEmail.ToString();
string phone = tbPhone.ToString();
string color = tbColor.ToString();
this.Hide();
UserControl2 u2 = new UserControl2();
MainForm f1 = new MainForm();
f1.panelMain.Controls.Add(u2);
f1.listView1.Items.Add(new ListViewItem(new[]{
name,
email,
phone,
color}));
}
它不起作用。只隐藏了usercontol1,我留下了空白。 我做错了什么?
(使用visual studio 13和c#语言)
答案 0 :(得分:0)
我认为使用 backgroundworker 控件实际上适用于您的情况。
private void btnProceed_Click(object sender, EventArgs e)
{
string name = tbName.ToString();
string email = tbEmail.ToString();
string phone = tbPhone.ToString();
string color = tbColor.ToString();
string a = " "+name+" "+email+" "+phone+" "+color;
backgroundWorker1.RunWorkAsync(a);//passing the variables to the backgroundWorker
}
然后在backgroundWorker_doWork()中,您可以根据需要填充您正在获取的数据。
答案 1 :(得分:0)
你太复杂了。您可以将UI上的两个控件分层放在同一位置,并将第二个控件的Visible
属性设置为False
。
让第一个用户控件公开按钮单击的事件(或者只显示按钮以便访问其Click
事件),以便您可以从主窗体中检测到鼠标单击。然后,当调用该按钮的监听器时;主窗体可以从第一个控件中获取数据,使用它初始化第二个控件,然后隐藏第一个控件并显示第二个控件。
答案 2 :(得分:0)
您正在将新的usercontrol添加到MainForm的新实例。您无法看到它,因为此新实例从未显示过。为了以最简单的方式避免此问题,您将当前MainForm的实例传递给UserControl构造函数,请将该实例保存在UserControl的全局变量中,并在需要切换两个用户控件时使用该实例。
在MainForm.cs中(当你创建第一个usercontrol时)
UserControl1 uc = new UserControl1(this);
.....
在UserControl1.cs
中public class UserControl1
{
MainForm _current;
public UserControl1(MainForm f)
{
InitializeComponent();
_current = f;
}
private void btnProceed_Click(object sender, EventArgs e)
{
.....
UserControl2 u2 = new UserControl2();
_current.panelMain.Controls.Add(u2);
u2.listView1.Items.Add(new ListViewItem(new[]{
name,
email,
phone,
color}));
}
}
这对于正确处理其他任务会有问题。我建议重新设计您的应用程序,让MainForm决定在需要时显示哪个用户控件。
在这种方法中,当用户单击UserControl1时,您可以使用事件在MainForm.cs中获取通知,因此您可以在MainForm.cs中获取此信息
UserControl1 uc = new UserControl1();
uc.UserClick += UserAdded;
.....
其中UserAdded是MainForm的一种方法,通过类UserInfoArgs
收到有关新用户的信息public void UserAdded(UserControl1 sender, UserInfoArgs args)
{
sender.Hide();
UserControl2 u2 = new UserControl2();
this.panelMain.Controls.Add(u2);
u2.listView1.Items.Add(new ListViewItem(new[]{
args.name,
args.email,
args.phone,
args.color}));
}
在UserControl1中,您需要添加委托,事件并在需要向MainForm传达有关新用户的信息时引发事件。
public class UserControl1
{
public delegate void onClick(UserControl1 sender, UserInfoArgs args);
public event onClick UserClick;
....
private void btnProceed_Click(object sender, EventArgs e)
{
UserInfoArgs args = new UserInfoArgs()
{
name = tbName.Text,
email = tbEmail.Text,
phone = tbPhone.Text,
color = tbColor.Text
};
if(UserClick != null)
UserClick(this, args);
}
public class UserInfoArgs
{
public string name {get;set;}
public string email {get;set;}
public string phone {get;set;}
public string color {get;set;}
}