Как объединить 2 групповых блока в C #? - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу получить текст из группы 1, нажав на второй.Как я могу реализовать эту функцию через события?Я не программист C #.

enter image description here

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp9
{
    public partial class Form1 : Form
    {
        GroupBox GetGroupBox(string header)
        {
            GroupBox box = new GroupBox()
            {
                AutoSize = true
            };
            TableLayoutPanel layout = new TableLayoutPanel()
            {
                AutoSize = true
            };
            layout.Controls.Add(new Label() { Text = header });
            box.Controls.Add(layout);
            for (uint i = 0; i < 2; ++i)
                layout.Controls.Add(new RadioButton() { Text = i.ToString() });
            return box;
        }
        public Form1()
        {
            InitializeComponent();
            TableLayoutPanel layout = new TableLayoutPanel()
            {
                AutoSize = true
            };
            Controls.Add(layout);
            layout.Controls.Add(GetGroupBox("Group box 1"));
            layout.Controls.Add(new Label() { Text = new string('-', 10) });
            layout.Controls.Add(GetGroupBox("Group box 2"));
        }
    }
}

Ответы [ 2 ]

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

Если не указано иное, я бы вставил содержимое с помощью панели инструментов из Form1.cs [design].

Вы можете получить доступ к панели инструментов из меню: Вид -> Панель инструментов.

Оттуда вы можете перетащить содержимое в вашу форму.https://docs.microsoft.com/en-us/visualstudio/ide/reference/toolbox?view=vs-2017

Макет будет таким же, как тот, который вы определили.

  • Основным контейнером является TableLayoutPanel (Имя tableLayoutPanel1).
  • Верхний левый GroupBox (имя groupBox1)
  • Нижний левый GroupBox2 (groupBox2)
  • Верхний правый TextBox (имя textBox1 установлено только для чтения).

Свойство Name можно использовать для доступа к элементу из кода позади.

Внутри каждой группы у нас будут переключатели, определенные как:

  • radioButton1 / 2 для groupBox1
  • radioButton3 / 4 для groupBox2

В Form1.cs [design], нажав на элемент, вы сможете изменить его свойства.На рисунке ниже вы можете увидеть, как получить доступ к тексту для radioButton1 groupBox1.

enter image description here

В Form1.cs [design], нажав на элемент, который высможет добавить обработчик событий.

enter image description here

Как только вы добавите что-либо в форму, ваш код будет отражать это.

Помня об этом, вашему классу Form1 понадобится просто обрабатывать логику, когда происходит щелчок для radioButton3 / 4 groupBox2 и соответствующим образом обновлять свойство textBox1.text.

Класс будет таким простым:

   public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.textBox1.ReadOnly = true;
    }

    //as the radio buttons are in a group box they be mutually exclusive
    private void radioButton3_CheckedChanged(object sender, EventArgs e)
    {
        if (this.radioButton3.Checked || radioButton4.Checked)
        {
            int val = this.radioButton1.Checked ? 0 : 1;
            textBox1.Text = String.Format("Expected msg:{0}", val);
        }
    }

    //as the radio buttons are in a group box will be mutually exclusive
    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        radioButton3_CheckedChanged(sender, e);
    }
}
0 голосов
/ 23 декабря 2018

Я внес некоторые изменения в ваш код, но я чувствую, что должен вас предостеречь, поскольку это, скорее всего, не элегантное или масштабируемое решение проблемы, с которой вы сталкиваетесь.Я добавил обработчик событий в событие click на переключателях - добавив логическую переменную addEventHandler, для которой по умолчанию установлено значение false.Логика, которая обрабатывает событие, не самая лучшая, но ... надеюсь, это поможет.

GroupBox GetGroupBox(string header, bool addEventHandler = false)
        {
            GroupBox box = new GroupBox()
            {
                AutoSize = true,
                Name = header
            };
            TableLayoutPanel layout = new TableLayoutPanel()
            {
                AutoSize = true
            };
            layout.Controls.Add(new Label() { Text = header });
            box.Controls.Add(layout);

            for (uint i = 0; i < 2; ++i)
            {
                var rbtn = new RadioButton() { Text = i.ToString() };
                if (addEventHandler)
                {
                    rbtn.Click += Form1_Click;
                }                
                layout.Controls.Add(rbtn);
            }

            return box;
        }

        public Form1()
        {
            InitializeComponent();

            TableLayoutPanel layout = new TableLayoutPanel()
            {
                AutoSize = true
            };
            layout.Controls.Add(GetGroupBox("Group box 1"));
            layout.Controls.Add(new Label() { Text = new string('-', 10) });
            layout.Controls.Add(GetGroupBox("Group box 2", true));
            Controls.Add(layout);
        }

        private void Form1_Click(object sender, EventArgs e)
        {
            var group1Selected = this.Controls[0].Controls[0].Controls[0].Controls;
            var senderControl = (RadioButton)sender;

            if (senderControl.Parent.Parent.Name == "Group box 2")
            {
                for (int i = 0; i < group1Selected.Count; i++)
                {
                    if (group1Selected[i] is RadioButton)
                    {
                        var rb = group1Selected[i] as RadioButton;
                        if (rb.Checked)
                        {
                            DialogResult rst = MessageBox.Show("Expected Message: " + rb.Text);
                        }
                    }
                }
            }            
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...