Dinuka Kuruppu Ответов: 2

Выключатель элементы управления UserControl в mainform внутри пользовательского элемента управления щелкните событие - winform


Это может показаться глупым, но мне трудно понять это; любая помощь будет оценена по достоинству:

У меня есть два пользовательских элемента управления под названием “Safety_Check” и “OEE_Track”... В моем Основная форма У меня есть группа под названием “pnl_main_controller” здесь я показываю оба моих пользовательских элемента управления. У меня есть две кнопки на моей основной форме, и я динамически переключаюсь между ними без каких-либо проблем.

Safety_Check пользовательский контроль;
public partial class Safety_Check : UserControl
    {
        private static Safety_Check _instance;

        public static Safety_Check instance
        {
            get
            {
                if (_instance == null)
                    _instance = new Safety_Check();
                return _instance;
            }
        }

        public Safety_Check()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ///////------------------------
        }

    }

OEE_Track User control

public partial class OEE_Track : UserControl
    {

        private static OEE_Track _instance;

        public static OEE_Track instance
        {
            get
            {
                if (_instance == null)
                    _instance = new OEE_Track();
                return _instance;
            }
        }

        public OEE_Track()
        {
            InitializeComponent();
        }
    }

MainForm:

public partial class MainForm : Form
    {
     private void btn_reg_Click(object sender, EventArgs e)
        {
            if (!pnl_main_controller.Contains(Safety_Check.instance))
            {
                pnl_main_controller.Controls.Add(Safety_Check.instance);
                Safety_Check.instance.Dock = DockStyle.Fill;
                Safety_Check.instance.BringToFront();
            }
            else
            {
                Safety_Check.instance.BringToFront();
            }        }

       private void btn_OEE_Click(object sender, EventArgs e)
        {
            if (!pnl_main_controller.Contains(OEE_Track.instance))
            {
                pnl_main_controller.Controls.Add(OEE_Track.instance);
                OEE_Track.instance.Dock = DockStyle.Fill;
                OEE_Track.instance.BringToFront();
            }
            else
            {
                OEE_Track.instance.BringToFront();
            }
     }

То, что я пытаюсь сделать, это у меня есть кнопка под названием “Кнопка button1” на моем “проверка безопасности” Usercontrol, всякий раз, когда я нажимаю на это , я хочу “проверка безопасности” чтобы исчезнуть дальше “pnl_main_controller- и принеси “OEE_Track- на панель

Что я уже пробовал:

if (!main.pnl_main_controller.Contains(Safety_Check.instance))
            {
                Safety_Check.instance.Hide();
                main.pnl_main_controller.Controls.Add(OEE_Track.instance);
                OEE_Track.instance.Dock = DockStyle.Fill;
                OEE_Track.instance.BringToFront();
            }
            else
            {
                OEE_Track.instance.BringToFront();
            }

BillWoodruff

Рассматривали ли вы простое решение использования TabControl ?

2 Ответов

Рейтинг:
17

#realJSOP

Вот как я мог бы сделать это в вашем обработчике событий в WPF (конечно, вы не сказали нам, с каким фреймворком вы работаете, поэтому я просто предполагаю решение):

// toggle the first item
Safety_Check.Visibility = (Safety_Check.Visibility == Visibility.Collapsed) ? Visibility.Visible 
                                                                            : Visibility.Collapsed;
// and then toggle the second item, based on the first item's visibility
OEE_Track.Visibility    = (Safety_Check.Visibility == Visibility.Collapsed) ? Visibility.Visible 
                                                                            : Visibility.Collapsed;


Dinuka Kuruppu

Спасибо за ответ. Я забыл упомянуть о фреймворке, я использую winforms

Рейтинг:
0

OriginalGriff

Не делай этого так.
Это плохое решение, потому что оно противоречит принципам OOPs: "дочерние" элементы управления должны не только знать о своем "родителе" (что ставит под угрозу дизайн), но и о существовании (и типе) друг друга - что делает невозможным повторное использование, а также означает, что вы не можете вносить какие-либо изменения, не учитывая влияние другого кода в других классах.
Здесь столько плохих дизайнерских идей творится!

Вместо этого используйте события, которые обрабатываются в "родительской форме", чтобы контролировать происходящее.
Видеть здесь: Передача информации между двумя формами, Часть 3: Ребенок ребенку[^] - речь идет о формах (но пользовательские элементы управления работают точно так же, формы-это элементы управления, в конце концов) и коммуникациях, но применяются те же принципы и механизмы.