2014-11-24 50 views
0

我想在winforms中做一個預訂系統。我有一個組合框,您可以從一到十個選擇數字。我也有10個組合框,我只想顯示組合框的數量等於組合框中選定的數字。在組框中,我有另一個組合框,我可以選擇座位號碼,這就是爲什麼它的重要,不是所有的框都顯示在同一時間。我有點失落,我試圖使用行動偵查者,但我沒有成功。Winform Combobox改變GUI與沃勒斯

在這裏,我呼籲在組合框中發現的GUI:

private void btnMakeBook_Click(object sender, EventArgs e) 
    { 
     ServiceReferenceBooking.BookingServiceClient bookingService = new ServiceReferenceBooking.BookingServiceClient(); 
     ServiceReferenceTickets.TicketsServiceClient ticketsService = new ServiceReferenceTickets.TicketsServiceClient(); 
     splitContainer1.Panel2.Controls.Clear(); 
     InitializeMakeBookingComponents(); 

     var allBookings = bookingService.GetAllBookings(); 
     dataGridView2.DataSource = allBookings; 

     cbTickets.ValueMember = "amount"; 
     cbTickets.DisplayMember = "amount"; 
     cbTickets.DataSource = ticketsService.GetAllTickets(); 

    }  

這裏是我努力使事件:

private void cbTickets_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (cbTickets.SelectedItem.ToString() == "2") 
      { 
       gboxSeat2.Visible = true; 
      } 
    } 

我得到的錯誤:對象引用不設置爲一個對象的實例。 它在if語句所在的行上。

這是我試圖創建活動,但選擇2

希望你們可以幫忙當分組框中沒有得到明顯的!謝謝

+0

您遇到什麼問題?有什麼問題,發佈你的代碼,如果有什麼不工作。聽起來就像是在該數字組合框的「SelectedIndexChanged」事件中設置GroupBox.Visible屬性。 – 2014-11-24 14:13:00

+0

我沒有任何代碼發佈。是的,那正是我想要做的。我已經設置了所有GroupBox.Visible = false,以便默認情況下不顯示它們。但我不知道如何使用SelectedIndexChanged? – 2014-11-24 14:17:18

+0

這相當[簡單](http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindexchanged%28v=vs.110%29.aspx)。試一下,如果遇到問題就來這裏。謝謝。 – 2014-11-24 14:20:16

回答

0

SelectedIndexSelectedItem之間的差異,第一個是選擇的項目的0基礎指數,第二個是您正在尋找的實際項目。試試這個

private void cbTickets_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (((ComboBox)sender).SelectedItem == "2")   
    { 
     gboxSeat2.Visible = true; 
    } 
} 

要充實我的建議:

public partial class Form1 : Form 
{ 
    //Declare your basic controls here 
    GroupBox gboxSeat1 = new GroupBox() { BackColor = Color.Red, Visible=false}; 
    GroupBox gboxSeat2 = new GroupBox() { BackColor = Color.Blue, Visible = false }; 
    GroupBox gboxSeat3 = new GroupBox() { BackColor = Color.Green, Visible = false }; 
    GroupBox gboxSeat4 = new GroupBox() { BackColor = Color.Orange, Visible = false }; 
    ComboBox cbTickets = new ComboBox() { Items = { "0", "1", "2", "3", "4" }, Height = 35, Width = 150 }; 
    public Form1() 
    { 
     InitializeComponent(); 
     //Setup handlers and add them to the panel 
     cbTickets.SelectedIndexChanged += comboBox2_SelectedIndexChanged; 
     panel1.Controls.Add(gboxSeat1); 
     panel1.Controls.Add(gboxSeat2); 
     panel1.Controls.Add(gboxSeat3); 
     panel1.Controls.Add(gboxSeat4); 
     panel1.Controls.Add(cbTickets); 

    } 

    private void InitializeBookingComponents() 
    { 
     //Arrange your controls the way you want here 
    } 

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (((ComboBox)sender).SelectedItem == "2") 
      gboxSeat2.Visible = true; 
    } 

} 

這將確保你永遠只能有一個控制,你可以刪除或他們在您的休閒唯一保持添加到您的面板您的其中一個控件

+0

我已經試過這個,現在我得到一個錯誤,說:對象引用未設置爲對象的實例。你知道這可能是爲什麼嗎?它以某種方式得到一個空值。我不明白爲什麼? – 2014-11-24 15:28:15

+0

顯示您正在使用的確切代碼,以便發生該錯誤。這是說,你的一個對象是null – 2014-11-24 15:29:17

+0

好吧,我要編輯上面的代碼。一會兒。 – 2014-11-24 15:32:57