我想从我的主窗体中重新访问我的一些子usercontrol ..我想访问该对象" watch"我已经从WatchListUC中声明了watch = new WatchListUC();
来自我的主要我在主窗体的面板上声明了这个用户控件
private void MyList_Load(object sender, EventArgs e)
{
LogInScreen screen = new LogInScreen();
panel2.Controls.Clear();
panel2.Controls.Add(screen);
loadDB();
grid.ContextMenuStrip = OpenDetails;
}
然后我创建了一个登录,然后我就可以调用WatchListUC watch = new WatchListUC();我想稍后回忆一下
是代码
private void LogIn_Click(object sender, EventArgs e)
{
SuspendLayout();
try
{
MySqlConnection conn = new MySqlConnection(myConnection);
conn.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM maindatabase.users where user=?parameter1 and pass=?parameter2;", conn);
command.Parameters.AddWithValue("?parameter1", User.Text);
command.Parameters.AddWithValue("?parameter2", Pass.Text);
MySqlDataReader reader = command.ExecuteReader();
int ctr = 0;
while (reader.Read())
{
ctr++;
// controlnum = reader["idnum"].ToString();
MyList.AccountControlNum = int.Parse(reader["idnum"].ToString());
// MessageBox.Show(MyList.AccountControlNum.ToString());
}
if (ctr == 1)
{
this.Parent.Controls.Remove(this);
MyList my = MyList.ActiveForm as MyList;
UserAccount acc = new UserAccount();
my.panel2.Controls.Add(acc);
my.label1.Text = reader["user"].ToString()+" 'List";
WatchListUC watch = new WatchListUC();
my.panel3.Controls.Clear();
my.panel3.Controls.Add(watch);
FinishListUC finish = new FinishListUC();
my.panel4.Controls.Clear();
my.panel4.Controls.Add(finish);
// MessageBox.Show("Success!");
}
else
{
MessageBox.Show("Invalid Username or Password!");
}
conn.Close();
ResumeLayout();
}
catch (Exception ex)
{
MessageBox.Show("error" + ex);
ResumeLayout();
}
ResumeLayout();
}
现在在我的主要表格上我如何在" insertWL()"之后重新访问方法??
void ConfirmedWL()
{
SuspendLayout();
try
{
MySqlConnection conn = new MySqlConnection(myConnection);
conn.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM maindatabase.watchlist where ControlNum=?CN and idnum=?ID;", conn);
command.Parameters.AddWithValue("?CN", int.Parse(a.ToString()));
command.Parameters.AddWithValue("?ID", MyList.AccountControlNum);
MySqlDataReader reader = command.ExecuteReader();
int ctr = 0;
while (reader.Read())
{
ctr++;
}
if (ctr == 1)
{
MessageBox.Show("Already Existed!");
}
else
{
insertWL();
//WatchListUC watch1 = panel3.Controls.Find("watch", true).DefaultIfEmpty() as WatchListUC;
//watch1.dvgRefresh();
//here i want to recall the watch so i can call the method dvgRefresh();
}
conn.Close();
ResumeLayout();
}
catch { }
}<br>
我希望有人可以帮助我,这是我的全部代码和屏幕截图 http://www.mediafire.com/download/1l18e6v8158mi16/Help_please.rar
答案 0 :(得分:1)
watch
是可视对象,可以像每个对象一样使用。
这意味着您可以将其引用存储在最适合您的范围内的任何变量中。
在您的示例中,我将在表单级别定义WatchListUC watch;
:
LogIn_Click
然后,在watch = new WatchListUC();
my.panel3.Controls.Clear();
my.panel3.Controls.Add(watch);
事件方法中,这样做没有错:
ConfirmedWL
最后,在watch
方法中,只需使用您拥有的...
else
{
insertWL();
watch.dvgRefresh();
}
实例。
watch
这种方法的缺点是您必须小心控制生命周期:
null
将为NullReferenceException
,如果您尝试使用.Dispose()
而不在其中添加新控件,则会导致WatchListUC
。__init__.py
。如果您计划在应用程序生命周期中只有一个{{1}}实例,则不需要这样做。