Пользовательский элемент управления ComboBox в GTK # с использованием MonoDevelop - PullRequest
0 голосов
/ 14 января 2020

Я хочу создать собственный WComboBox, используя GTK.ComboBox. Я могу создать и скомпилировать исходный код WComboBox и создать библиотеку.

Я использую сгенерированную библиотеку в другом примере приложения.

Я могу перетащить элемент управления WComboBox с помощью MonoDevelop.

Ошибка типа сброса во время компиляции.

/usr2/vkumbhan/Projects/CustomControls/UsingCustControls/gtk-gui/MainWindow.cs(21,21): Error CS0266: Cannot implicitly convert type 'Gtk.ComboBox' to 'CustControls.WComboBox'. An explicit conversion exists (are you missing a cast?) (CS0266) (UsingCustControls)

Я исправил ошибку во время компиляции, чтобы добавить объект typecast.

        this.wcombobox1 = (CustControls.WComboBox)global::Gtk.ComboBox.NewText();

Но время выполнения выдает исключение.

System.InvalidCastException: Specified cast is not valid.
at MainWindow.Build () [0x00056] in /usr2/vkumbhan/Projects/CustomControls/UsingCustControls/gtk- 
gui/MainWindow.cs:22
at MainWindow..ctor () [0x00009] in 
/usr2/vkumbhan/Projects/CustomControls/UsingCustControls/MainWindow.cs:8
at UsingCustControls.MainClass.Main (System.String[] args) [0x00007] in 
/usr2/vkumbhan/Projects/CustomControls/UsingCustControls/Program.cs:11

Пожалуйста, найдите образец исходный код.

Библиотека:

using System;
namespace CustControls
{
[System.ComponentModel.ToolboxItem(true)]
public class WComboBox : Gtk.ComboBox
{
    public WComboBox()
    {
        // Insert initialization code here.
    }
    protected override bool OnButtonPressEvent(Gdk.EventButton ev)
    {
        // Insert button press handling code here.
        return base.OnButtonPressEvent(ev);
    }
    protected override bool OnExposeEvent(Gdk.EventExpose ev)
    {
        base.OnExposeEvent(ev);
        // Insert drawing code here.
        return true;
    }
    protected override void OnSizeAllocated(Gdk.Rectangle allocation)
    {
        base.OnSizeAllocated(allocation);
        // Insert layout code here.
    }
    protected override void OnSizeRequested(ref Gtk.Requisition requisition)
    {
        // Calculate desired size here.
        requisition.Height = 50;
        requisition.Width = 50;
    }
}
}

Пример приложения:

 // This file has been generated by the GUI designer. Do not modify.

public partial class MainWindow
{
private global::Gtk.VBox vbox1;

private global::CustControls.WComboBox wcombobox1;

protected virtual void Build()
{
    global::Stetic.Gui.Initialize(this);
    // Widget MainWindow
    this.Name = "MainWindow";
    this.Title = global::Mono.Unix.Catalog.GetString("MainWindow");
    this.WindowPosition = ((global::Gtk.WindowPosition)(4));
    // Container child MainWindow.Gtk.Container+ContainerChild
    this.vbox1 = new global::Gtk.VBox();
    this.vbox1.Name = "vbox1";
    this.vbox1.Spacing = 6;
    // Container child vbox1.Gtk.Box+BoxChild
    this.wcombobox1 = (CustControls.WComboBox)global::Gtk.ComboBox.NewText();
    this.wcombobox1.Name = "wcombobox1";
    this.vbox1.Add(this.wcombobox1);
    global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.wcombobox1]));
    w1.Position = 0;
    w1.Expand = false;
    w1.Fill = false;
    this.Add(this.vbox1);
    if ((this.Child != null))
    {
        this.Child.ShowAll();
    }
    this.DefaultWidth = 400;
    this.DefaultHeight = 300;
    this.Show();
    this.DeleteEvent += new global::Gtk.DeleteEventHandler(this.OnDeleteEvent);
}
}

Можете ли вы помочь мне с этим.

Спасибо! Виджай Кумбхани

...