использовать указаный клас для всех елементов в рамках функции

SNenko
Дата: 13.05.2014 11:51:44
Здраствуйте.
Есть много елементов, которым надо дописать "snr.".(snr.tbSTBScan_.BackColor = Color.White;)
В какомто язике программирования встречал With, который позволял использовать указаный клас для всех елементов в рамках функции With. Как это сделать в c#?
Есть:
                MAC = "";
                CHIP = "";
                HDD = "";

                tbHDCPScan.Text = "";

                tbSTBScan_.Text = "";
                tbSTBScan_.BackColor = Color.White;

                tbMACScan_.Text = "";
                tbMACScan_.BackColor = Control.DefaultBackColor;
                tbMACScan_.ReadOnly = true;

                tbCheapID_.Text = "";
                tbCheapID_.BackColor = Control.DefaultBackColor;
                tbCheapID_.ReadOnly = true;

                panel1_.BackColor = Control.DefaultBackColor;
                panel2_.BackColor = Control.DefaultBackColor;
                panel3_.BackColor = Control.DefaultBackColor;


Хочу:
with(snr)
{
                MAC = "";
                CHIP = "";
                HDD = "";

                tbHDCPScan.Text = "";

                tbSTBScan_.Text = "";
                tbSTBScan_.BackColor = Color.White;

                tbMACScan_.Text = "";
                tbMACScan_.BackColor = Control.DefaultBackColor;
                tbMACScan_.ReadOnly = true;

                tbCheapID_.Text = "";
                tbCheapID_.BackColor = Control.DefaultBackColor;
                tbCheapID_.ReadOnly = true;

                panel1_.BackColor = Control.DefaultBackColor;
                panel2_.BackColor = Control.DefaultBackColor;
                panel3_.BackColor = Control.DefaultBackColor;
}

Спасибо!
Arm79
Дата: 13.05.2014 12:16:54
SNenko
Как это сделать в c#?

Никак.
LameUser
Дата: 13.05.2014 15:14:06
Arm79
SNenko
Как это сделать в c#?

Никак.


На самом деле вопрос некорректен.
Как понимаю, ТС имел ввиду не класс, а свойство класса для всех "элементов".



Делается достаточно просто - если есть общее открытое свойство BackColor - то у всех элементов должен быть один общий предок.

Соответственно рефлексией вытащить всех мемберов у которых общих предок и задать нужное значение.
Можно добавить фильтрацию некую, если она необходимо по каким-нить признакам.

Но вопрос в чем - стоит ли овчинка выделки? Рефлексия, как правило - плохо.
bazile
Дата: 13.05.2014 15:32:13
SNenko
Есть много елементов, которым надо дописать "snr.".(snr.tbSTBScan_.BackColor = Color.White;)

Это можно сделать с помощью column edit режима

http://msdn.microsoft.com/en-us/library/vstudio/729s2dhh(v=vs.100).aspx
To select a rectangle of text

Hold down the ALT key, press down on the left-click button of your mouse, and then drag the cursor over the text to select.

—or—

Hold down the SHIFT+ALT keys and press any Arrow key.
Antonariy
Дата: 13.05.2014 17:41:01
Заменить в режиме регулярного выражения:
SNenko
Дата: 14.05.2014 14:34:34
LameUser,
Вы правы. Код не корректен..
изминил структуру кода..

Сейчас это процедура самого элемента [b]"snr"[/b]

        public void ClearAllTextboxes_Block()
        {
            MAC = "";
            CHIP = "";
            HDD = "";

            default_ControlTextBox(panel0, tbHDCPScan, false, Color.White);

            default_ControlTextBox(panel1, tbSTBScan, false, Color.White);

            default_ControlTextBox(panel2, tbMACScan, true);

            default_ControlTextBox(panel3, tbCheapID, true);

        }

спасибо!
Где-то в степи
Дата: 14.05.2014 15:26:15
SNenko,
ну тут же очевидно, что свойство цвета объективно принадлежит базовому типу контрола, осталось применить
просто рекурсию ко все элементам формы, и если зная какие то ограничения для каждого меняемого элемента изменить у него цвет

 static void Rec<TElement>(IEnumerable elements, Func<TElement, IEnumerable> secondLevelEments,Action<TElement> action)
        {
            foreach (var element in elements)
            {
                action((TElement) element);
                Rec(secondLevelEments((TElement)element), secondLevelEments, action);

            }
        }
........................

 Rec<Control>(Controls,c=>c.Controls, t =>
                                                      {
                                                          if (t is TextBox&&t.Parent is Panel)
                                                          {
                                                              t.BackColor = Color.Wheat;
                                                          }
                                                      });
SNenko
Дата: 15.05.2014 10:00:59
Где-то в степи,

        public void ClearAllTextboxes_Block(bool isCleanHDCPScan = false)
        {
            MAC = "";
            CHIP = "";
            HDD = "";

            if (!isCleanHDCPScan)
                default_ControlTextBox(tbHDCPScan, false, Color.White);

            default_ControlTextBox(tbSTBScan, false, Color.White);

            default_ControlTextBox(tbMACScan, true);

            default_ControlTextBox(tbCheapID, true);

        }

        static void default_ControlTextBox(TextBox tb, bool ReadOnly, System.Drawing.Color color, bool isFocus = true, string text = "")
        {
            tb.Text = text;

            if (isFocus)tb.Focus();
            tb.BackColor = color;

            Panel p = (Panel)tb.Parent;

            tb.ReadOnly = ReadOnly;
            p.BackColor = Control.DefaultBackColor;
        }