Могу ли я получить доступ к элементу управления формы в другом пользовательском элементе управления, не создавая новый экземпляр? - PullRequest
0 голосов
/ 05 декабря 2018

Администратор - это та форма, которая имеет метку и я хочу получить к ней доступ во время выполнения из другой формы или другого пользовательского элемента управления

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

, но еслия сделал новый экземпляр, я должен закрыть старый, чтобы показать изменения, но я не хочу делать это в течение всего времени выполнения

1 Ответ

0 голосов
/ 05 декабря 2018

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 будет устанавливать метку уже отображаемой формы (Кстати, я думаю, вы хотите, чтобы свойство устанавливало текст метки, а неметка, верно?)

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

Я надеюсь, что этобудет вам полезен - удачи !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...