Admin是具有标签的表单,我希望在运行时从另一个表单或另一个用户控件访问它
public partial class Admin : Form
{
public Admin()
{
InitializeComponent();
}
public Label lbl
{
get { return label8; }
set { label8.Text = value.ToString(); }
}
}
用户控制:
Admin.lbl.text="something"; //could i do this and how ??
但是如果我创建了一个新实例,则应该关闭旧实例以显示更改 但我不想在运行期间一直这么做
答案 0 :(得分:0)
Abanoub-如果我了解您要执行的操作-您想设置一个已经显示的表单的标签而不创建该表单的新实例。至少有一种方法可以使用持有表单实例的单例类。因此,将只有一个实例的形式。请尝试以下操作:
首先,我们创建一个保留表单实例的单例类:
public class Singleton
{
// Modified from: http://csharpindepth.com/articles/general/singleton.aspx
// This will keep ONE instance of the Admin Form
private Admin _adminForm;
public Admin AdminForm
{
get
{
if (_adminForm == null)
{
_adminForm = new Admin();
}
return _adminForm;
}
}
private static Singleton instance = null;
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
现在,您可以从此实例中实例化,例如:
按钮1将显示以下形式:
private void button1_Click(object sender, EventArgs e)
{
var singleton = Singleton.Instance;
var f = singleton.AdminForm;
f.Show();
}
按钮2将设置已经显示的表单标签(顺便说一句-我想您希望属性设置标签的 text 而不是标签正确吗?)
private void button2_Click(object sender, EventArgs e)
{
// Assuming you clicked button 1 first,
// this will not cause a new instance but use the existing one
var singleton = Singleton.Instance;
var f = singleton.AdminForm;
f.LabelText = "Hello world!";
}
假设您要设置标签的文本-这是Admin中的修改属性:
public string LabelText
{
get { return label8.Text; }
set { label8.Text = value; }
}
我希望这对您有帮助-祝您好运!