我正在c#Windows窗体应用程序上测试此代码。这是我正在做的测试。
Panel1有一个“ p1Button”。
“ UserControl1”具有“ uc1Button”
单击“ p1Button”以在Panel1中加载“ UserControl1”
当我在“ uc1Button”上单击事件时,找不到panel2
有可能还是任何建议?
// Form1.cs
using System;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void p1Button_Click(object sender, EventArgs e)
{
if (!panel1.Controls.Contains(UserControl1.Instance))
{
panel1.Controls.Add(UserControl1.Instance);
UserControl1.Instance.BringToFront();
}
else
{
UserControl1.Instance.BringToFront();
}
}
}
}
// UserControl1.cs
using System;
using System.Windows.Forms;
namespace Test
{
public partial class UserControl1 : UserControl
{
private static UserControl1 _instance;
public static UserControl1 Instance
{
get
{
if (_instance==null)
{
_instance = new UserControl1();
}
return _instance;
}
}
public UserControl1()
{
InitializeComponent();
}
private void uc1Button_Click(object sender, EventArgs e)
{
}
}
}
// UserControl2.cs
using System.Windows.Forms;
namespace Test
{
public partial class UserControl2 : UserControl
{
private static UserControl2 _instance;
public static UserControl2 Instance
{
get
{
if (_instance == null)
{
_instance = new UserControl2();
}
return _instance;
}
}
public UserControl2()
{
InitializeComponent();
}
}
}
答案 0 :(得分:0)
首先,您不应该将控件设置为单例。 第二,您必须了解父子边界。
您的父母是表格。窗体有两个孩子-面板。面板1还有另外两个孩子-您的用户控件和一个按钮。您的用户控件还有其他子项-按钮。
因此,如果要在usercontrol1的第二个面板上放置某些内容,则至少有两个选择:
不好的方法。 这是不好的方法,您不应该这样做,因为它会严格地将用户控件与表单绑定在一起。 您应该从用户控件(即面板)中获取父项,然后从此面板(即表单)中获取父项,然后查看其他面板。
好方法。 简单又好。将事件处理程序添加到您的用户控件中,例如:
公共UserControl1:UserControl { 公共事件EventHandler ButtonClicked; }
,然后在您的按钮中单击userControl:
bind value in lable inside the template filed
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("CultivarType") %>'/>
</ItemTemplate>
using find control u can get that value
Label lb = (Label)GridView1.Rows[i].Cells[2].FindControl("Label1");
string s = lb.Text;
然后,您需要在此处理程序上签名主表单:
ButtonClicked?.Invoke(this, EventArgs.Empty);
您应该阅读有关C#中的委托和事件的更多信息。