GTK夏普刷新/重绘部件

问题描述:

我试图开发一个非常简单的图形用户界面与单声道和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 
} 

代码工作但第二个组合框似乎不会被更新。我想我需要刷新窗口?

感谢

我得到它的工作两个低级的事情就是打电话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

的问题是,你分配一个新的Gtk.ComboBoxmonthSelect变量,但不能自动从窗口中删除旧的组合框,并添加这个新的一个。你想要的是清除组合框的内容并添加新的内容。喜欢的东西:

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

也许为时已晚,但是......

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