Combobox GTK夏普刷新/重画小部件
我正在尝试用mono和GTK sharp开发一个非常简单的GUI。我有几个两个组合框,我需要根据第一个组合框中选定的项目更改secod中可用的选项:Combobox GTK夏普刷新/重画小部件,combobox,refresh,gtk#,Combobox,Refresh,Gtk#,我正在尝试用mono和GTK sharp开发一个非常简单的GUI。我有几个两个组合框,我需要根据第一个组合框中选定的项目更改secod中可用的选项: //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 s
//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
}
代码正常,但第二个组合框似乎没有更新。我想我需要刷新一下窗户
谢谢问题在于您正在为
monthSelect
变量分配一个新的Gtk.ComboBox
,但这不会自动从窗口中删除旧的组合框并添加此新组合框。您需要的是清除组合框的内容并添加新内容。比如:
monthSelect.Clear();
monthSelect.AppendText("January");
monthSelect.AppendText("April");
monthSelect.AppendText("July");
monthSelect.AppendText("October");
这两个意思是调用
Clear()
,正如fog所说(+1),但在这之后,您需要分配一个单元格rendertext,否则新项目将不会显示:
也许太晚了,但是
((ListStore)combobox.Model).Clear();
组合框。追加文本(“项目”);
如果指定了一个新模型,您甚至不需要Clear()(正确地说,您需要提供至少一个单元渲染器。)
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;
}