Здравствуйте!
Проблема следующего характер. Приведу на простом примере:
- на форму помещается виджет контейнер;
- в него помещается кнопка;
- запускается приложение, т.е. выполняется Application.Run ();
- при этом в отдельном потоке через некоторое время запускается другой метод, добавляющий в этот контейнер, как мне кажется, поверх него, другой виджет-контейнер, тоже с кнопкой, но маленько со смещением
В итоге:
- первая кнопка работает нормально, реагирует на все события
- второй можно передать фокус клавишей "Tab" и даже нажать её клавишей "Enter", но вот на нажатие мыши она не реагирует. Обработчики не срабатывают.
Может надо перенести её как-то на передний план, если конечно это возможно?
Или всё таки проблема в чем-то другом?
GTK динамическое создание виджетов
Модератор: Модераторы разделов
-
sciko
- Сообщения: 1744
- Статус: Ъ-участник
- ОС: Debian/Ubuntu/etc
Re: GTK динамическое создание виджетов
Код в студию. Версии библиотек и выхлоп в консоль тоже.
-
evgeniypaygusov
- Сообщения: 3
Re: GTK динамическое создание виджетов
Main.cs
Библиотеки:
Gtk# for .Net 2.12.10
GTK+ Runtime 2.12.1 rev b
Консоль:
Код: Выделить всё
using System;
using System.Threading;
using Gtk;
namespace newProject
{
class MainClass
{
public static MainWindow win;
public static void Main (string[] args)
{
Application.Init ();
win = new MainWindow ();
win.Show ();
Thread thread = new Thread(
delegate() {
Draw();
});
thread.Start();
Application.Run ();
}
public static void Draw()
{
System.Threading.Thread.Sleep(1500);
Fixed fixed2 = new Fixed();
Button btn2 = new Button();
btn2.HeightRequest = 50;
btn2.WidthRequest = 50;
btn2.Label = "panel2";
fixed2.HeightRequest = 200;
fixed2.WidthRequest = 200;
fixed2.Add(btn2);
((Fixed.FixedChild) fixed2[btn2]).X = 50;
((Fixed.FixedChild) fixed2[btn2]).Y = 0;
(win.Child as Fixed).Add(fixed2);
((Fixed.FixedChild) (win.Child as Fixed)[fixed2]).X = 0;
((Fixed.FixedChild) (win.Child as Fixed)[fixed2]).Y = 0;
fixed2.ShowAll();
win.ShowAll();
}
}
}
MainWindow.cs
using System;
using Gtk;
public partial class MainWindow : Gtk.Window
{
public MainWindow () : base(Gtk.WindowType.Toplevel)
{
Build ();
fixed1.HeightRequest = 100;
fixed1.WidthRequest = 100;
Button btn1 = new Button();
btn1.HeightRequest = 50;
btn1.WidthRequest = 50;
btn1.Label = "panel1";
fixed1.Add(btn1);
((Fixed.FixedChild) fixed1[btn1]).X = 0;
((Fixed.FixedChild) fixed1[btn1]).Y = 0;
fixed1.ShowAll();
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}
}Библиотеки:
Gtk# for .Net 2.12.10
GTK+ Runtime 2.12.1 rev b
Консоль:
Код: Выделить всё
Loaded Module 'C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'
Started Thread 5948
Loaded Module 'C:\Documents and Settings\paygusov\Мои документы\Projects\newProject\newProject\bin\Debug\newProject.exe'
Loaded Module 'C:\WINDOWS\assembly\GAC\gtk-sharp\2.12.0.0__35e10195dab3c99f\gtk-sharp.dll'
Loaded Module 'C:\WINDOWS\assembly\GAC\glib-sharp\2.12.0.0__35e10195dab3c99f\glib-sharp.dll'
Loaded Module 'C:\WINDOWS\assembly\GAC\atk-sharp\2.12.0.0__35e10195dab3c99f\atk-sharp.dll'
Loaded Module 'C:\WINDOWS\assembly\GAC\gdk-sharp\2.12.0.0__35e10195dab3c99f\gdk-sharp.dll'
Loaded Module 'C:\WINDOWS\assembly\GAC_MSIL\Mono.Posix\2.0.0.0__0738eb9f132ed756\Mono.Posix.dll'
Started Thread 2024-
xterro
- Сообщения: 18
- ОС: openSUSE 11.4
Re: GTK динамическое создание виджетов
хмм... а зачем делать win.ShowAll(); в новом потоке, ведь основную форму ты уже показал?
-
evgeniypaygusov
- Сообщения: 3
Re: GTK динамическое создание виджетов
разницы не почуствовал между просто показом отдельного элемента и всей формы... делаю для того чтобы показать вложенные элементы.