具有相同功能的ComboBox和TextBox

时间:2015-03-30 06:57:12

标签: c# wpf winforms visual-studio combobox

美好的一天到了所有人,我想知道是否有可能

Winform Items

A。)1~5 ComboBox

B。)1~5文本框用于时间(我将它们识别为例如txtTime1~txtTime5)

C。)数量为1~5的文本框(我将它们识别为例如txtAmount1~txtAmount5)

第1~5项(ComboBox 1-5,txtTime 1-5,txtAmount 1-5)将执行相同的功能。

一个。)

if (combobox1.SelectedValue.ToString() == "Regular")
    {
        x = 1.25;
    }
else if (combobox1.SelectedValue.ToString() == "Double")
    {
        x = 2;
    }
 // Same Codes for ComboBox 2~5

B.)文本框“txtTime(s)”将保存TextChange事件,获取我们所说的组合框的值

if (txtTime.Text.Lenght > 0)
    {
    // Item Letter "C"
    // value of "x" is equal to the above item
    txtAmount.Text = (double.Parse(txtTime.Text) * x).ToString();
    }

我只需要快速了解如何完成这项工作

提前感谢

编辑*

我能想到的只是一个快速的代码来逐个调用它们

private Method1()
{ double x,base;
  if (combobox1 = "Regular")
    { x = base * 1.25; }

  if (combobox2 = "Regular")
    { x = base * 1.25; }
      // so on
 return x;
}

private txtTime1_TextChange(Event ****)
  { 
    if (txtTime1.Text.Lenght > 0)
      { txtAmount1.Text = (Method1() * double.Parse(txtTime1.Text)).ToString();}


private txtTime2_TextChange(Event ****)
    { 
     if (txtTime2.Text.Lenght > 0)
      { txtAmount2.Text = (Method1() * double.Parse(txtTime2.Text)).ToString();}

    // and so on

1 个答案:

答案 0 :(得分:0)

您可以将方法作为控件事件处理程序。每个事件处理程序都有一个sender参数,表示事件触发的控件。 您可以拥有这样的事件处理程序:

public ComboBoxEventHandler(object sender,EventArgs args)
{
var comboBox=sender as ComboBox;
if(comboBox==null) return;
if (comboBox.SelectedValue.ToString() == "Regular")
    {
        x = 1.25;
    }
else if (comboBox.SelectedValue.ToString() == "Double")
    {
        x = 2;
    }
}}

你可以为其他控件做同样的事情。

<强>更新

为了使维护更容易,您可以拥有一个包含相应控件及其行为的类,然后您可以动态地将控件添加到表单中而无需重复自己,或者您可以非常轻松地向表单添加更多行。比如这样:

public class RowController
{
public ComboBox Rate{get;private set;}
public TextBox Hours{get;private set;}
public TextBox Amount{get;private set;}

public RowController(ComboBox rate,TextBox hours,TextBox amount)
{
Rate=rate;
Hours=hours;
Hours.TextChange+=OnHoursChanged;
Amount=amount;
}

private void OnHoursChanged(object sender,EventArgs args)
{
 if (Hours.Text.Length > 0)
      { Amount.Text = (GetRate() * double.Parse(Hours.Text)).ToString();}
}

private double GetRate()
{
if (Rate.SelectedValue.ToString() == "Regular")
    {
        return 1.25;
    }
else if (Rate.SelectedValue.ToString() == "Double")
    {
        return 2;
    }
}
}

然后您可以在表单中定义RowControllers,如下所示:

var row1=new RowController(comboBox1,txtTime1,txtAmount1);

并且每个控制器都会自己完成它的工作。