Текстовое поле не хранит информацию, а другие делают, если не пусто пусто - PullRequest
0 голосов
/ 24 сентября 2019

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

 private void button1_Click(object sender, EventArgs e)
    {
        if (this.Controls.OfType<TextBox>().Any(t => string.IsNullOrWhiteSpace(t.Text)))
        {
             // what can i put here to exclude multiple
        }
        else
        {
            //if any of thouse are empty i dont want them to do this but if they are not empty i do want
            lablCinnamonset.Text = textBox1.Text; 
            lablMallardset.Text = textBox2.Text;
            lablAxisdeerSet.Text = textBox3.Text;
            lablBlackbuckSet.Text = textBox4.Text;
            lablMuledeerSet.Text = textBox5.Text;
            lablReddeerSet.Text = textBox6.Text;
            lablPumaSet.Text = textBox7.Text;
            lablWaterbuffaloSet.Text = textBox8.Text;
            lablJackrabbitSet.Text = textBox9.Text;
            lablCoyoteSet.Text = textBox10.Text;
            lablWhitetailSet.Text = textBox11.Text;
            lablBlacktailSet.Text = textBox12.Text;
            lablBlackbearSet.Text = textBox13.Text;
            lablRooseveltSet.Text = textBox14.Text;
            lablMooseSet.Text = textBox15.Text;
        }

Я не хочу делать, оператор if для каждого текстового поля, это должен быть лучший способ.

Спасибо, ребята

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Почему бы просто не извлечь метод ?

  private static void AssignIfNotEmpty(Control target, Control source) {
    if (!string.IsNullOrWhiteSpace(source.Text))
      target.Text = source.Text;
  }

Затем использовать его

private void button1_Click(object sender, EventArgs e) {
  AssignIfNotEmpty(lablCinnamonset, textBox1); 
  AssignIfNotEmpty(lablMallardset, textBox2);
  AssignIfNotEmpty(lablAxisdeerSet, textBox3);
  AssignIfNotEmpty(lablBlackbuckSet, textBox4);
  AssignIfNotEmpty(lablMuledeerSet, textBox5);
  AssignIfNotEmpty(lablReddeerSet, textBox6);
  AssignIfNotEmpty(lablPumaSet, textBox7);
  AssignIfNotEmpty(lablWaterbuffaloSet, textBox8);
  AssignIfNotEmpty(lablJackrabbitSet, textBox9);
  AssignIfNotEmpty(lablCoyoteSet, textBox10);
  AssignIfNotEmpty(lablWhitetailSet, textBox11);
  AssignIfNotEmpty(lablBlacktailSet, textBox12);
  AssignIfNotEmpty(lablBlackbearSet, textBox13);
  AssignIfNotEmpty(lablRooseveltSet, textBox14);
  AssignIfNotEmpty(lablMooseSet, textBox15);
}

Вы можете организовать например,

public partial class MyForm : Form {
  private Dictionary<Label, TextBox> m_Correspondence = 
    new Dictionary<Label, TextBox>();

  public MyForm() {
    InitializeComponent();

    m_Correspondence.Add(lablCinnamonset, textBox1);
    m_Correspondence.Add(lablMallardset, textBox2);
    ...
    m_Correspondence.Add(lablMooseSet, textBox15);
  }

В этом случае button1_Click будет очень простым:

private void button1_Click(object sender, EventArgs e) {
  foreach (var pair in m_Correspondence)
    AssignIfNotEmpty(pair.Key, pair.Value);
}
0 голосов
/ 24 сентября 2019

Предположим, что вы можете изменить имена различных "labl ..." на что-то вроде "labl1", "labl2" или каким-либо образом отобразить их (возможно, используя словарь), тогда вы можете использовать функцию
FindName,Пример:

for(int i=1; i<16; i++){
   if( (TextBox)this.FindName("textBox" + i.ToString()).Text != ""){
       //Here you can do what you want
   }
}

Ссылка здесь: https://docs.microsoft.com/it-it/dotnet/api/system.windows.frameworkelement.findname?view=netframework-4.8

...