. 첫 번째 열은 ComboBox입니다. 즉, Gtk.CellRendererCombo를 사용합니다. 사실, ComboBox에서 값을 선택하면 셀의 Text를 방금 선택한 값으로 변경하고 싶습니다. Gtk.CellRendererCombo.Edited 이벤트에서 Text 필드 열을 EditedArgs.NewText로 설정하면 가능합니다.GTK CellRendererCombo 설정 값 나는 그것을 여러 열을 가지고 트 리뷰를 할 노력하고있어 무엇
문제는 값을 설정할 때마다 새 행을 만들고 Gtk.CellRendererText 에서처럼 텍스트 필드를 작동 시키려고하지만 문제가되지 않습니다. 그것은 Gtk.CellRendererCombo.Text에 걸렸고으로 해당 열에서 각 행에 대해 다른 값,하지만 같은 값 아니다
Gtk.CellRenderer 어떤 상태를 포함 할 수 없습니다, 그래서 OK, 텍스트 필드를 사용하는 것은 정말 나쁜 내가하려는 일에서 나온 아이디어.
그러나 Gtk.ListStore에서 Gtk.CellRendererCombo의 모델과 다른 TreeView의 모델 인 값을 설정하면됩니다. 설정된 값은 ComboBox의 열에 표시되지 않습니다.
class Program
{
private static Gtk.TreeView treeview = null;
static void OnEdited(object sender, Gtk.EditedArgs args)
{
Gtk.TreeSelection selection = treeview.Selection;
Gtk.TreeIter iter;
selection.GetSelected(out iter);
treeview.Model.SetValue(iter, 0, args.NewText); // the CellRendererCombo
treeview.Model.SetValue(iter, 1, args.NewText); // the CellRendererText
//(sender as Gtk.CellRendererCombo).Text = args.NewText; // Will set all the Cells of this Column to the Selection's Text
}
static void Main(string[] args)
{
Gtk.Application.Init();
Gtk.Window window = new Window("TreeView ComboTest");
window.WidthRequest = 200;
window.HeightRequest = 150;
Gtk.ListStore treeModel = new ListStore(typeof(string), typeof(string));
treeview = new TreeView(treeModel);
// Values to be chosen in the ComboBox
Gtk.ListStore comboModel = new ListStore(typeof(string));
Gtk.ComboBox comboBox = new ComboBox(comboModel);
comboBox.AppendText("<Please select>");
comboBox.AppendText("A");
comboBox.AppendText("B");
comboBox.AppendText("C");
comboBox.Active = 0;
Gtk.TreeViewColumn comboCol = new TreeViewColumn();
Gtk.CellRendererCombo comboCell = new CellRendererCombo();
comboCol.Title = "Combo Column";
comboCol.PackStart(comboCell, true);
comboCell.Editable = true;
comboCell.Edited += OnEdited;
comboCell.TextColumn = 0;
comboCell.Text = comboBox.ActiveText;
comboCell.Model = comboModel;
comboCell.WidthChars = 20;
Gtk.TreeViewColumn valueCol = new TreeViewColumn();
Gtk.CellRendererText valueCell = new CellRendererText();
valueCol.Title = "Value";
valueCol.PackStart(valueCell, true);
valueCol.AddAttribute(valueCell, "text", 1);
treeview.AppendColumn(comboCol);
treeview.AppendColumn(valueCol);
// Append the values used for the tests
treeModel.AppendValues("comboBox1", string.Empty); // the string value setted for the first column does not appear.
treeModel.AppendValues("comboBox2", string.Empty);
treeModel.AppendValues("comboBox3", string.Empty);
window.Add(treeview);
window.ShowAll();
Gtk.Application.Run();
}
}
나는 선택이 값을 표시하게되어있는 콤보 상자의 셀을 좋아하지만, 나중에 변경 편집 할 수 계속할 것입니다.
누군가가이 일을하는 방법이 있다면, 난 당신이 입력에 매우 감사하게 될 것입니다. 감사.
는 업데이트 : Gtk.CellRendererCombo이 Gtk.CellRendererText에서 상속 때문에 내가 무슨 생각
, 그냥 셀에 걸렸고 값을 무시합니다. 지금, 나는 내가 렌더링에 제공 할 때 셀에 걸렸고 값을 Gtk.CellRendererCombo에서 상속 및 사용 사용자 정의 MyCellRendererCombo을 만들 수도 있겠죠,하지만 Gtk.CellRendererText 및 Gtk.CellRendererCombo의 차이에 대한 설명서는 아주 슬림 ... 나는 세부 사항을 알기 위해 C에서 구현을 방문해야한다고 생각한다.