Кнопка для возврата значения переменной строки - PullRequest
1 голос
/ 28 марта 2019

Может ли кнопка вернуть значение переменной? Возможно ли это?Я новичок в winform, так что ... пойми меня.Конечная цель - создать простой код с двумя кнопками, который при нажатии возвращает сообщение msgbox со значением переменной.

private string button3_Click(object sender, EventArgs e)
{
  string res = "PASS";
  MessageBox.Show(res);
  return res;
}

private string button4_Click(object sender, EventArgs e)
{
  string res = "FAIL";
  MessageBox.Show(res);
  return res;

}

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Ну, button3_Click и так далее - это так называемые функции обратного вызова , которые вызываются системой , и поэтому не возвращают никакого значения (системе это не нужно) , Давайте извлечем метод :

private string MyButtonClick(object sender) {
  string result = "";

  if (sender == button3) 
    result = "PASS"; //TODO: better read it from resources, not hadcoded
  else if (sender == button4) 
    result = "FAIL"; //TODO: better read it from resources, not hadcoded

  if (!string.IsNullOrEmpty(result))
    MessageBox.Show(result); 

  return result;     
}

И тогда вы можете положить:

// System callback function

// void: System callback function signature
private void button3_Click(object sender, EventArgs e) {
  MyButtonClick(sender);  
}

// void: System callback function signature
private void button4_Click(object sender, EventArgs e) {
  MyButtonClick(sender);  
} 

Или

// custom code

string myClickMessage = MyButtonClick(button4);
0 голосов
/ 28 марта 2019

Обработчики событий Click имеют строго типизированную подпись, то есть тип возвращаемого значения должен быть void, поэтому вы не можете ничего от них вернуть.

Но, если вы работаете с Windows Forms, у вас есть класс для вашей формы, в который вы поместили эти хеднлеры событий. Итак, что вы можете сделать: определить частную переменную:

pirvate string _res;

, а затем присвойте ему значение в хедлерах событий клика, например ::

private string button3_Click(object sender, EventArgs e)
{
  _res = "PASS";
  MessageBox.Show(_res);
}

Тогда в коде вы можете использовать это значение по своему желанию.

Если вы хотите использовать его вне вашего класса, определите свойство:

public string Res
{
  get { return _res; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...