передавать значение между флажками в других формах в C # - PullRequest
1 голос
/ 13 июля 2011

Мне нужна твоя помощь.У меня есть две формы, Form1 и Form2.В Form1 у меня есть checkBox1, а в Form2 у меня есть checkBox2.Все, что я хочу, это значение checkBox1, автоматически переводящего в checkBox2.

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Прежде всего, в многоцелевом приложении прямой контакт в форме не должен быть разрешен.Тем не менее, я могу придумать способ, который я представляю здесь, учитывая ваш, это исключительный сценарий.Таким образом, метод может нарушать обычные лучшие практики.

Вот метод

  1. Сделайте ваши флажки в формах общедоступными.Вы можете сделать это, нажав на CheckBox в режиме конструктора, а затем выбрав «Public» в разделе «Модификаторы» в окне «Свойства».Этот шаг делает ваш флажок доступным извне экземпляра вашей формы.

  2. Введите следующий код в CheckedChanged событие CheckBox в Form1.

    ((Form2)(Application.openForms["Form2"])).checkBox1.Checked = this.checkBox1.Checked;
    

Однако я настоятельно рекомендую пересмотреть вашу стратегию в зависимости от потребностей вашего приложения.

1 голос
/ 14 июля 2011

В форме 1:

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

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        Form2 a = new Form2();
        a.c = checkBox1.Checked;
        a.ShowDialog();
    }
}

В форме 2:

    public partial class Form2 : Form
{
    public bool c;
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        checkBox1.Checked = c;
    }
}
0 голосов
/ 14 июля 2011

Все экземпляры Form2 в родительском объекте MDI будут отражать любые изменения свойства Checked элемента управления CustomCheckBox, помещенного в форму.Конечно, это будет справедливо при размещении CustomCheckBox на любой дочерней MDI-форме, просто установите соответствующие события, такие как Form2.

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

namespace WindowsFormsApplication1 {
    public partial class Form2 : Form {
        public Form2() {
            InitializeComponent();

            CustomCheckBox.CheckChanged += (object sender, EventArgs e) => {
                if (sender != m_customCheckBox) { m_customCheckBox.Checked = CustomCheckBox.GetCheck(); }
            };

            FormClosed += (object _sender, FormClosedEventArgs _e) => {
                CustomCheckBox.CheckChanged -= (object __sender, EventArgs __e) => { };
            };

        }
    };
};



////////////////////////////////////////////////

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {

    public class CustomCheckBox : CheckBox {
        static private bool? m_checked = null;
        static private object m_synchRoot = new object();
        static public event EventHandler CheckChanged;

        public CustomCheckBox() {
            if (HasCheckValue) {
                // Do this BEFORE we set up the CheckChanged event so that
                // we do not needlessly kick off the CustomCheckBox.CheckChanged
                // event for any other existing CustomCheckBoxes (as they already
                // have their Checked property properly set)...
                Checked = CustomCheckBox.GetCheck();
            }
            this.CheckedChanged += new EventHandler(OnCheckedChanged);
        }       

        protected void OnCheckedChanged(object sender, EventArgs e) {           
            if (CustomCheckBox.HasCheckValue && this.Checked == CustomCheckBox.GetCheck()) {
                return;
            } else {
                CustomCheckBox.SetCheck(this.Checked);
                if (CustomCheckBox.CheckChanged != null) {
                    CustomCheckBox.CheckChanged(sender, e);
                }
            }
        }

        static public bool HasCheckValue {
            get {
                lock (m_synchRoot) {
                    return m_checked.HasValue;
                }
            }
        }

        static public bool GetCheck() {
            lock (m_synchRoot) {
                return m_checked.Value;
            }
        }

        static private void SetCheck(bool _check) {
            lock (m_synchRoot) {
                m_checked = _check;
            }
        }
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...