Я хочу создать собственный 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);
}
}
Можете ли вы помочь мне с этим.
Спасибо! Виджай Кумбхани