2013-02-13 66 views
0

我試圖開發一個非常簡單的圖形用戶界面與單聲道和GTK銳利。我有幾兩個組合框,我需要改變的基礎上,選擇的項目從第一個secod可用的選項:GTK夏普刷新/重繪部件

//Create window container 
var mainContainer = new Table (3, 1, false); 

//add form 
var formContainer = new Table (1, 3, true); 

//FIRST COMBOBOX 
pdfSelect = new ComboBox(new string[] {"Monthly", "Monthly Offline", "Quarterly" }) { Active = 2 }; 
pdfSelect.Changed += new EventHandler(OnPdfSelectChanged); 
formContainer.Attach (pdfSelect, 1, 2, 0, 1); 

//MONTH COMBOBOX 
monthSelect = new ComboBox(new string[] { "January","February","March","April","May","June","July","August","September","October","November","December" }){ Active = 0 }; 

formContainer.Attach(monthSelect, 2, 3, 0, 1); 

mainContainer.Attach(formContainer, 0, 1, 0, 1); 

win.Add(mainContainer); 

我改變事件是如下:

public static void OnPdfSelectChanged(object o, EventArgs args) { 
    ComboBox combo = o as ComboBox; 
    if (o == null) return; 
    if (combo.ActiveText.Equals("Monthly") || combo.ActiveText.Equals("Monthly Offline")) 
    { 
     monthSelect = new ComboBox(new string[] { "January","February","March","April","May","June","July", 
      "August","September","October","November","December" }) { Active = 0 }; 
    } 
    else 
    { 
     monthSelect = new ComboBox(new string[] { "January", "April", "July", "October" }) { Active = 0 }; 
    } 
    //TODO REFRESH WINDOW 
} 

代碼工作但第二個組合框似乎不會被更新。我想我需要刷新窗口?

感謝

回答

1

我得到它的工作兩個低級的事情就是打電話Clear()霧說(+1),但在此之後,你需要分配一個細胞rendertext或新項目將不會被顯示:

Gtk.ComboBox.Clear Method "Unsets all the mappings on all renderers for this combo box."

public static void OnPdfSelectChanged(object o, EventArgs args) { 
    ComboBox combo = o as ComboBox; 
    if (o == null) return; 
    //Set entries 
    var entries = new string[] { "January","February","March","April","May","June","July", "August","September","October","November","December" }; 
    if (combo.ActiveText.Equals("Quarterly")) 
    { 
     entries = new string[] { "January", "April", "July", "October" }; 
    } 
    //clear previous data 
    monthSelect.Clear(); 
    //cells data 
    ListStore store = new ListStore(typeof(string)); 
    foreach (var item in entries) { 
     store.AppendValues(item); 
    } 
    //assign data to combobox 
    monthSelect.Model = store; 
    //renderer for cells 
    var cellRenderer = new CellRendererText(); 
    monthSelect.PackStart(cellRenderer, true); 
    monthSelect.AddAttribute(cellRenderer, "text", 0); 
    //set first item as active 
    monthSelect.Active = 0; 
} 
+1

如果您分配一個新的模型你甚至不需要Clear()(並且,正確的,你需要提供至少一個單元格渲染器。) – fog 2013-02-14 13:11:50

1

的問題是,你分配一個新的Gtk.ComboBoxmonthSelect變量,但不能自動從窗口中刪除舊的組合框,並添加這個新的一個。你想要的是清除組合框的內容並添加新的內容。喜歡的東西:

monthSelect.Clear(); 
monthSelect.AppendText("January"); 
monthSelect.AppendText("April"); 
monthSelect.AppendText("July"); 
monthSelect.AppendText("October"); 
0

也許爲時已晚,但是......

((ListStore)combobox.Model).Clear(); 
combobox.AppendText("item");