【发布时间】:2019-08-01 12:08:52
【问题描述】:
我构建了一个在 windows10 上运行的 C# GUI,通过 Python 和 Python 模块 CLR 进行控制。
很遗憾,菜单快捷方式不起作用。如果我将 GUI 构建为 .EXE,则快捷方式可以工作,在 GUI-C#-code 中调用处理程序,我可以将其转发到 Python 代码。但是,如果我将项目构建为 DLL,则不能将菜单项称为 [CTRL]+[S]。
GUI 是通过 Python 启动的:
clr.AddReference(os.getcwd() + os.sep + "PadTestGuiC.dll")
import PadTestGuiC #this imports previous loaded class from dll
pgui = PadTestGuiC.PadTestGuiC()
pgui.m_pythonCB = pgui.pythonCallbackHandler(cbs1s1)
pguit = Thread(target=pgui.ShowDialog)
这是 c# gui 中的处理程序:
private void helpToolStripMenuItem1_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex = 1;
addDoIts("help."); #this also shows information in textbox
}
如果 GUI 构建为 DLL,则不会调用它。 我没有找到有关此问题的信息。为什么这不起作用?我是否需要通过捕获所有击键来创建解决方法?让快捷方式再次起作用的最简单方法是什么?
【问题讨论】:
-
如何控制?通过使用窗口消息?可访问性?您确定将消息发送到正确的窗口吗?您正在就尚未发布或描述的代码寻求帮助。
-
我为你添加了代码,虽然我认为这不是代码问题。如果它是 DLL,则不会调用自动生成的 C# 处理程序。如果你真的感兴趣:生成一个 GUI。创建简单的菜单实体。使用 GUI 编辑器添加快捷方式(在此之前您不需要生成任何代码)现在从菜单条目修改文本框。将其构建为 DLL。您可以为我通过鼠标或键盘 [alt]+[...] bot 调用菜单条目,快捷方式不起作用。我不寻求代码方面的帮助。我就 C# exe 和 dll gui menue 行为之间的区别寻求帮助。
-
没有 DLL GUI、C# 或其他东西。在 Windows 和 Linux 上,菜单都是由窗口系统管理的资源。点击、短消息等都是操作系统发送到应用程序的消息处理泵的消息,该应用程序的消息处理泵采取行动。 库 不执行,因此它们没有消息泵。只有 可执行文件 运行。如果您从 Python 进程调用该 DLL,那么它就是运行泵的那个。应将键盘或鼠标消息发送到该进程(特别是其主窗口)
-
如果我在菜单中使用鼠标或键盘,它会自动对点击做出反应并执行我在函数中添加的代码,该代码是由 VisualStudio 自动创建的。无需创建额外的处理程序。请自己试一试,再说,不是这样的。
-
这不是 Windows 的工作方式。
automatically部分是操作系统本身向应用程序的消息泵发送键或鼠标事件。另一方面,如果您加载库本身,您为什么要尝试单击任何内容?只需调用方法本身。无论如何,业务逻辑都不应该放在事件处理程序中,因此您可以调用实现所需功能的对象和方法。
标签: c# python user-interface dll windows-10