2015-12-17 25 views
0

我在编码中实现了两个组合框。第一个组合框包含城市名称,第二个组合框包含该城市的POI。现在我想实现这两个组合框之间的else语句。假设如果我选择第一个组合框,按钮将只启用第一个,然后如果我选择第二个组合框,那么按钮将工作于第二个。我不知道怎么做。我的代码是这样的如果else语句在两个组合框之间使用c#

public void Download_Click(object sender, EventArgs e) 
{ 
    // if combox1 select 
    // all function will work for combobox 1 

    //else if combobox2 select 
    //combobbox1 disabled and all function will work for combobx2  
} 

起初,我创建的类设置combobox1的价值这样

  class PlaceList 
       { 

        public static ComboBox Combo_list = new ComboBox(); 
        public static DataGridView dataTable = new DataGridView(); 

        public static void List() 
        { 

         var startPath = Application.StartupPath; 
         string folderName = Path.Combine(startPath, "POI_List"); 
         System.IO.Directory.CreateDirectory(folderName); 
         string SavedfileName = "POI_list.json"; 
         var Saving_path = Path.Combine(folderName, SavedfileName); 

         string fileName = "Zensus_Gemeinden_org.xlsx"; 
         var path = Path.Combine(startPath, fileName); 

         String name = "Gemeinden_31.12.2011_Vergleich"; 
         String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
             path + ";Extended Properties='Excel 12.0 XML;HDR=YES;';"; 

         OleDbConnection con = new OleDbConnection(constr); 
         OleDbCommand oconn = new OleDbCommand("Select [3] as City,[4] as Population, * From [" + name + "$D7:E11300] Where [4] > 10000", con); 
         con.Open(); 

         OleDbDataAdapter sda = new OleDbDataAdapter(oconn); 
         DataTable data = new DataTable(); 

         sda.Fill(data); 
         dataTable.DataSource = data; 



         for (int i = 0; i < data.Rows.Count; i++) 
         { 
          Combo_list.Items.Add(data.Rows[i]["City"]); 
         } 


         string Place_Json = "Place_List:" + JsonConvert.SerializeObject(data, Formatting.Indented); 
         File.WriteAllText(Saving_path, Place_Json); 

        } 
       } 
    } 

然后在Form1.cs我创建

Dictionary<string, List<string>> poi = new Dictionary<string, List<string>>(); 


    private void LoadKeys() 
    { 

     foreach (string line in File.ReadLines("TextFile1.txt")) 
       { 
        string[] parts = line.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); 
        poi.Add(parts[0], new List<string>()); 
        poi[parts[0]] = new List<string>(parts.Skip(1)); 
       } 

    } 

    void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (comboBox1.SelectedItem != null) 
     { 
      string txt = comboBox1.SelectedItem.ToString(); 
      if (poi.ContainsKey(txt)) 
      { 
       List<string> points = poi[txt]; 
       comboBox2.Items.Clear(); 
       comboBox2.Items.AddRange(points.ToArray()); 
      } 
     } 
    } 

这意味着combobox2依赖的组合框1。它会给地方的名字在Form1.cs按钮1,我试图做到这一点accoerding到combobox1

然后最后somethis这样

public Form1() 
    { 

     InitializeComponent(); 


     PlaceList.Combo_list = comboBox1; 
     PlaceList.List(); 
     LoadKeys(); 


    } 


    private void button1_Click(object sender, EventArgs e) 
    { 

     if (comboBox1.SelectedIndex != 0) 
     { 
      ShortText.txt1 = richTextBox1; 
      ShortText.shortText(comboBox1.Text); 
     } 
     else if (comboBox2.SelectedIndex != 0) 
     { 
      ShortText.txt1 = richTextBox1; 
      ShortText.shortText(comboBox2.Text); 
     } 
     else 
     { 
      MessageBox.Show("Error"); 
     } 
+0

对于两个组合框或两个不同的按钮,它是相同的按钮吗? –

+0

'if(sender == comboBox1){} else {}'? – Sinatr

+0

每个组合框的不同事件? – Graham

回答

0

检查每个组合框的默认值的选定索引。不是默认值的那个是你使用的那个。例如,如果默认为索引0:

if(combo1.SelectedIndex != 0){ 
    //do something 
} 
else if(combo2.SelectedIndex != 0) { 
    //do something else 
} 
else { 
    // Error: You need to select something! 
} 
+0

不,我不工作它总是显示第一个组合框值 – Nowshin

+0

你的组合框代码是什么样的? – ScoobyDrew18

+0

嗨,我编辑了我的问题。请立即检查。 @ScoobyDrew – Nowshin