Заполнение контрольных значений из словаря? - PullRequest
3 голосов
/ 01 сентября 2011

Я новичок в C #, поэтому, пожалуйста, затуманивайте мой вопрос новичка.

Я создал словарь элементов управления из формы Windows под названием dictControls.Затем я заполнил его всеми элементами управления и значениями текстового поля и поля со списком:

Dictionary<Control, string> dictFormControls = new Dictionary<Control, string>(); 
        foreach (Control c in Controls)
        {
            if (c is ComboBox)
            {
               dictFormControls.Add(c, ((ComboBox)c).SelectedValue.ToString()); 
            }
            if (c is TextBox)
            {
               dictFormControls.Add(c, ((TextBox)c).Text); 
            }
            if (c is MaskedTextBox)
            {
               dictFormControls.Add(c, ((MaskedTextBox)c).Text);
            }
        }

        if (discNumber <= Convert.ToInt32(numDiscs))
        {
         frmAddVideo frm = new frmAddVideo(numDiscs, discNumber, videoID, sequenceID, dictFormControls);
         frm.Show();
         this.Close();
        }

Я хочу, чтобы словарь в основном выглядел примерно так:

Ключ ------------ значение

"txtName" ----- "Test"

"txtYear" ------ "1980"

Я передаю это обратно в ту же форму (frmAddVideo):

public frmAddVideo(string numDiscs, int discNumber, string videoID, string sequenceID, Dictionary<Control, string> dict)

    {
        this.numDiscs = numDiscs;
        this.discNumber = discNumber;
        this.videoID = videoID;
        this.sequenceID = sequenceID;
        InitializeComponent();

        //This is where I want to parse out the Dictionary and populate the form values
        foreach (KeyValuePair<Control, string> item in dict)
        {

            **Basically, I am looking for a way to take **            
            **item(Key)**
            **and do something like item(Key).Value = item(Value);**
            **so it would be the same as writing**
            **txtName.Text= "1980";**
            **cbxLocID.Value = 1;**
        }
    }

Я ищу способ взять ключ и превратить его в имя элемента управления, затем добавить «.Text» или «.Value "к нему, а затем установите значение элемента (значение), как я объяснил в коде выше.

Возможно ли это?Я пытался исследовать это, но мне еще предстоит собрать 2 и 2 вместе.

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Вы можете просто сохранить набор элементов управления, с которыми вы работаете, в вашем словаре:

class ControlBoundValueDescription
{
  private Control _control;

  public ControlBoundValueDescription(Control control)
  {
    _control = control;
  }

  public string Value
  {
    get
    {
      if(_control is ...) return ...
      ...
    }

    set
    {
      if(_control is ...) ((Xxx)_control).Yyy = value;
      ...
    }
  }
}
...    
Dictionary<string, ControlBoundValueDescription> dictControls = 
  new Dictionary<string, ControlBoundValueDescription>(); 
...
// defining mappings (you may also want to populate it automatically,
// by iterating over all the controls you have on your form)
dictControls["UserName"] = new ControlBoundValueDescription(tbUserName);
dictControls["Group"] = new ControlBoundValueDescription(cbxGroup);
...
// working with controls using previously defined mappings
dictControls["UserName"].Value = "guest"; // probably, text box
dictControls["Group"].Value = "Guest Users"; // probably, combo

Но сама идея, похоже, плохая. Вам, вероятно, следует прояснить проблему, которую вы пытаетесь решить.

0 голосов
/ 01 сентября 2011

Если я понимаю ваш вопрос, вы можете использовать Find ()

 ((TextBox)myForm.Controls.Find(Key, true)).Text = Value;
 ((CheckBox)myForm.Controls.Find(Key, true)).Checked = Boolean.Parse(Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...