【问题标题】:could i accessing a form control in another user control without making a new instance?我可以在不创建新实例的情况下访问另一个用户控件中的表单控件吗?
【发布时间】:2018-12-04 21:52:16
【问题描述】:

管理员是具有标签的表单,我想在运行时从另一个表单或另一个用户控件访问它

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 ??

但是如果我创建了一个新实例,我应该关闭旧实例以显示更改 但我不想在整个运行时间都这样做

【问题讨论】:

  • 如果第二种形式是用户控件怎么办?
  • 表单不是也不能是用户控件。它们是两种不同的东西。如果不将其添加到表单中,您无法创建(制作)一个可用的用户控件实例,因此在某处涉及另一个表单。
  • 第一个表单包含用户控件,所以我希望当我单击该用户控件时在该表单中进行一些更改,我可以这样做
  • 任何帮助请..?

标签: c# winforms


【解决方案1】:

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;
        }
    }
}

现在你从这个实例中实例化 from - 例如:

按钮 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!";
    }

假设您要设置标签的 text - 这是 Admin 中修改后的属性:

    public string LabelText
    {
        get { return label8.Text; }
        set { label8.Text = value; }
    }

我希望这对你有帮助 - 祝你好运!!

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多