【问题标题】:Combine Text cell & ComboBox cell to a TreeView column GTK C#?将文本单元格和组合框单元格组合到 TreeView 列 GTK C#?
【发布时间】:2020-05-28 23:17:48
【问题描述】:

我需要创建一个包含文本单元格和组合框单元格的树视图列。

如果值为 1,我想使用文本单元格。 如果值超过一个,我想使用 Combobox 单元格。

您能否分享一下帮助链接或示例。

谢谢! 维杰

【问题讨论】:

    标签: c# gtk monodevelop gtk#


    【解决方案1】:

    创建 CellRenderComboBox 对象并将此对象添加到 TreeviewColumn 对象。 用户需要注册 cellRendererCombo.EditingStarted += CellEditingStartedHandler 事件来更新组合框运行时。

    using System;
    using System.Threading;
    using Gtk;
    
    public partial class MainWindow : Gtk.Window
    {
    private Gtk.TreeView treeview1;
    private int guiThreadId;
    private bool stop = false;
    private int threadId = 0;
    public delegate void ThreadStart();
    
    
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
    
        guiThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;
    
        // Create our TreeView
        treeview1 = new Gtk.TreeView();
    
        Gtk.ScrolledWindow scrolledWindow = new ScrolledWindow();
        scrolledWindow.Add(treeview1);
    
        Gtk.VBox vBox = new VBox();
        vBox.Add(scrolledWindow);
        this.Add(vBox);
    
        CellRendererCombo cellRendererCombo = new CellRendererCombo();
        Gtk.TreeViewColumn treeViewColumn = new TreeViewColumn();
        treeViewColumn.Title = "TYPE";
        treeViewColumn.PackStart(cellRendererCombo, false);
        treeViewColumn.AddAttribute(cellRendererCombo, "text", 0);
        cellRendererCombo.Editable = true;
        cellRendererCombo.Model = new Gtk.ListStore(typeof(string));
        cellRendererCombo.Mode = CellRendererMode.Editable;
        cellRendererCombo.TextColumn = 0;
        cellRendererCombo.HasEntry = false;
        cellRendererCombo.WidthChars = 20;
        cellRendererCombo.Style = Pango.Style.Normal;
        cellRendererCombo.Edited += OnActionChanged;
        cellRendererCombo.EditingStarted += CellEditingStartedHandler;
    
        treeview1.AppendColumn(treeViewColumn);
    
        Gtk.ListStore listStore = new ListStore(typeof(string));
        listStore.AppendValues("A");
        listStore.AppendValues("B");
    
    }
    
    protected void OnEdited(object sender, Gtk.EditedArgs args)
    {
        Gtk.TreeSelection selection = treeview1.Selection;
        Gtk.TreeIter iter;
        selection.GetSelected(out iter);
        treeview1.Model.SetValue(iter, 1, args.NewText); // the CellRendererText
    }
    
    protected void CellEditingStartedHandler(object o, EditingStartedArgs args)
    {
        Console.WriteLine($"CellEditingStartedHandler");
        if (o is Gtk.CellRendererCombo)
        {
            Gtk.CellRendererCombo cellRendererCombo = (Gtk.CellRendererCombo)o;
    
            ((Gtk.ListStore)cellRendererCombo.Model).Clear();
            ((Gtk.ListStore)cellRendererCombo.Model).AppendValues("A");
            ((Gtk.ListStore)cellRendererCombo.Model).AppendValues("B");
        }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多