我刚刚开始使用GTK#并且我有一个NodeView工作,现在我想让列可以调整大小并由用户排序(比如Windows资源管理器中的详细信息视图模式).我在网上闲逛但找不到帮助.我是否使用了错误的小部件?
编辑:最后将我的答案移到了正确的答案帖子,见下文.
谢谢!贾森
我有一个DrawingArea,我想收到鼠标事件.从教程中我发现KeyPressEvent也会捕获鼠标事件.但是对于以下代码,从不调用处理程序.
static void Main ()
{
Application.Init ();
Gtk.Window w = new Gtk.Window ("");
DrawingArea a = new CairoGraphic ();
a.KeyPressEvent += KeyPressHandler;
w.Add(a);
w.Resize (500, 500);
w.DeleteEvent += close_window;
w.ShowAll ();
Application.Run ();
}
private static void KeyPressHandler(object sender, KeyPressEventArgs args)
{
Console.WriteLine("key press event");
}
Run Code Online (Sandbox Code Playgroud)
我通过阅读不同的论坛和教程尝试了很多东西,包括:
将EventBox添加到窗口并将DrawingArea放入事件框并订阅EventBox的KeyPressEvent.(没用)
调用AddEvents((int)Gdk.EventMask.AllEventsMask); 在任何和所有小部件上
我确实发现订阅Windows KeyPressEvent确实给了我键盘事件但不是鼠标点击事件.
单声道文档中的所有相关页面都给我错误,所以我有点卡住了
我正在使用Notebook小部件来拉出选项卡式文件视图,并且我添加了代码以允许从现有Notebook中分离页面,这会生成一个带有单独Notebook的新窗口,只包含该页面.但是,我希望能够在多个笔记本之间移动页面.
该Notebook.WindowCreationHook
委托给我的页面从何而来,页面插件的笔记本电脑,以及x和y坐标它是在下降,但我不知道我怎么能告诉什么笔记本它被跌落到,如果有的话.这种重新附着是否有内置机制,或者我必须通过坐标?如果我必须使用坐标,那么获取它们并获取Notebook小部件的最佳方法是什么?如果需要的话,我可以存储我已经浮动的笔记本列表,但即使这样,代码也可以找出哪一个会有点难度(考虑到z顺序和所有有趣的东西).
我需要为Xamarin Studio(Gtk #project)安装gstreamer-sharp.我安装了OSSBuild并添加到引用gstreamer-sharp.dll,调试后我得到了异常:
Gst.GLib.GException:Gst.Parse.Launch中没有元素"playbin"(String pipeline_description)
输出:
0:00:00.010000000 6224 0748AA00 ERROR GST_REGISTRY gstregistrybinary.c:557:gst_registry_binary_read_cache: Binary registry type not recognized (invalid magic) for file at C:\Users\Admin\.gstreamer-0.10\registry.i686.bin
** (gStremTest:6224): WARNING **: Failed to load plugin 'C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.6\bin\libgsf-win32-1-114.dll': `C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.6\bin\libgsf-win32-1-114.dll': ?? ?????? ????????? ??????.
** (gStremTest:6224): WARNING **: Failed to load plugin 'C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.6\bin\libpangocairo-1.0-0.dll': `C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.6\bin\libpangocairo-1.0-0.dll': ?? ??????? ????????? ?????????.
** (gStremTest:6224): WARNING **: Failed to load plugin 'C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.6\bin\librsvg-2-2.dll': `C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.6\bin\librsvg-2-2.dll': ?? ?????? ????????? ??????.
0:00:02.501003000 6224 0748AA00 …
Run Code Online (Sandbox Code Playgroud) 我在Mono for OSX上的GTK#中迈出了我的第一步(或许我的最后一步).我写了一个.cs文件,然后尝试用mono编译:
gmcs -pkg:gtk-sharp-2.0 one.cs
Run Code Online (Sandbox Code Playgroud)
这导致了这条消息
error CS8027: Couldn't run pkg-config: ApplicationName='pkg-config', CommandLine='--libs gtk-sharp-2.0', CurrentDirectory=''
Run Code Online (Sandbox Code Playgroud)
显然,这会要求我知道我在做什么.我知道
Mono的MacOS X安装程序附带Gtk +和Gtk#,因此您可以开始构建和运行包含OSX的跨平台GUI Gtk#应用程序."
所以没有什么可以安装的.
我在这里找到了GTK2
/opt/local/var/macports/sources/rsync.macports.org/release/ports/x11/gtk2/
Run Code Online (Sandbox Code Playgroud)
这是Mono安装肯定安装的.
Gmcs版本是2.4.2.2.
编辑:米格尔说我的道路上有一些奇怪的东西.
我按照Macports说明移除了所有Macport.我从.dmg重新安装了Mono.这是我目前的路径
export PATH=/opt/subversion:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)
但即使只使用/ usr/bin,它仍然无法避免错误.
所有单声道的东西都应该是它应有的地方,包括所有的东西/Library/Frameworks/Mono.framework/Versions/Current
.但是:很奇怪
/Library/Frameworks/Mono.framework/Versions/2.4.2.2/lib/gtk-sharp-2.0/
Run Code Online (Sandbox Code Playgroud)
是空的.但MonoDevelop运行,但不知道Gtk(我已经包含了它知道的所有引用)...
我正在开发一个简单的GTK#应用程序(没什么严重的,只是一个小项目),我注意到我的应用程序菜单栏显示在我的应用程序窗口而不是Ubuntu的Unity全局菜单栏中.
有没有办法让菜单栏显示在统一菜单栏中?我试图谷歌一点但大多数结果似乎是关于禁用此行为 - 我想启用它.
目前,我正在通过MonoDevelop的可视化编辑器将菜单栏添加到VBox.
我想在Gtk#(和C#)中为库存创建一个简单的图表系统,可以在其中绘制.我不知道从哪里开始:最好从头开始?或者使用预先制作的东西?是否最好使用开罗?还是System.Drawing?我可以重用一些代码吗?
谢谢
以某种模糊的方式,一个不添加新功能的派生类(尚未)与它的基类行为不同.派生类:
public class MyCheckButton : CheckButton
{
public MyCheckButton(string label) : base(label)
{
}
}
Run Code Online (Sandbox Code Playgroud)
MyCheckButton继承自(GTK#,Mono项目的一部分)CheckButton.但是,在以下代码段中,它们的行为有所不同:
var button1 = new CheckButton("_foo");
var button2 = new MyCheckButton("_foo");
// code omitted
Run Code Online (Sandbox Code Playgroud)
标签中的下划线确保标签获得助记符.对于button1,这适用于我的测试代码:我得到"foo",其中f加下划线.但是对于button2,这会失败.我只是在对话框中将"_foo"作为标签.
任何人都可以解释这个示例中的派生类如何表现不同,或者屏幕后面是否有一些魔法可能会检查实际类的类型?
将Gtk#RadioButton
类的实例添加到GUI时,会自动检查("激活")其单选按钮组的第一个成员.
对于Gtk,这在一定程度上已经在另一个问题中进行了讨论,所选答案的要点是用户希望始终选择一个单选按钮.
我不反对.
但是,我会以某种方式自动生成用户界面,因此每个单选按钮都链接到数据模型,但是没有一个单选按钮可以随时获取对任何其他RadioButton
实例的引用.数据模型确保始终检查一个单选按钮.
除了足以满足用户期望之外,我认为这是一个好的做法,就像这样,数据完整性由数据模型确保,而不是由GUI确保.
不幸的是,Gtk#会自动检查这样的所有单选按钮,因为它认为每个单选按钮是其组中的第一个.为了将各种单选按钮添加到同一组,我必须将组中的第一个单选按钮传递给其他单选按钮的构造函数 - 我不能,如上所述,因为我没有任何方法可以获得实例化其他时对第一个单选按钮的引用.
设置单选按钮的Active
属性false
没有帮助,也没有调用该Toggle
方法.
有没有办法抑制这种自动选择,可能是通过子类化和覆盖我还找不到的东西?或者,CheckButton
为了这个目的,是否有可能强制a 看起来像一个单选按钮?
如果真的没有其他解决方案,我会尝试实现另一个答案中建议的解决方案,其中包括为我的每个单选按钮添加第二个隐藏的单选按钮,但我会发现对于生产代码非常hacky.
gtk# ×10
c# ×6
mono ×4
.net ×2
monodevelop ×2
gstreamer ×1
gtk ×1
inheritance ×1
macos ×1
menubar ×1
radio-button ×1
ubuntu ×1
ubuntu-unity ×1
xamarin ×1