问题标签 [winforms-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winforms - RichTextBox (winform) 保存段落格式 (PARAFORMAT2)
我正在使用 RichTextBox 控件,它运行良好,除了行距。我通过 SendMessage 和 PARAFORMAT2 使用互操作调用来设置段落的行距。
这很好用。它完全符合我的需要。问题是,当我将 RTF 字符串保存出来,然后将其重新输入时,行距信息就消失了。
我可以通过添加第二个 RichText 框并使用下面的代码来证明这一点。在richTextBox1 中,rtf 字符串的格式正确。但是当它到达richTextBox2 时,它又是单行距的。
有什么保持格式的建议吗?我知道我可以使用 /ls 设置进入并破坏 RTF 字符串,但这非常痛苦。有没有更清洁的解决方案,我只是在某个地方失踪了?
更新:
EM_STREAMIN/OUT 建议很棒,但不幸的是导致了同样的疯狂。当我阅读更多关于 STREAMIN 和 STREAMOUT 的内容时,我发现控件提供的 SaveFile 和 LoadFile 是这两个消息命令的简单包装,因此为简单起见,我在此示例中使用这两个命令。我附上了一个示例应用程序。您应该能够将此代码剪切并粘贴到一个带有一个文本框和五个按钮的表单中:
加载、保存、清除、DoubleSpace 和 SingleSpace
我正在使用 MemoryStream 对象来处理保存和加载点击之间的临时数据。测试: (1) 使用 DoubleSpace 按钮更改一个或多个段落的间距。(2) 将 RichText 保存到 MemoryStream。(3) 清除富文本控件 (4) 将 MemoryStream 数据重新加载回控件中。
请注意,当它重新加载时,它已经失去了双空格格式。所有其他格式仍然存在。
c# - 从 WPF WindowsFormHost 设置“AcceptButton”
我在 WPF 控件中有一个带有多个按钮的 winforms 用户控件。
我的用户控件以前托管在 Windows 窗体中,我能够这样做
我正在尝试确定如何在用户控件上执行类似操作,因为它位于 WindowsFormHost 中。ParentForm 属性为空。
理想情况下,我希望实现两件事。
- AcceptButton 行为(Enter 键触发按钮按下)
- AcceptButton 格式 - 即 winforms 按钮应用了接受按钮的替代格式。
非常感谢,克里斯
c# - 如何将非托管对话框设置为 WinForm 表单的所有者?
我需要能够获得 WinForm 对话框的 Owner's HWND。在非托管中,我有一个后台线程可以获取前面窗口的 HWND。然后代码调用 ::GetParent(frontHWND) 来查看它是否需要隐藏不同的非模态 MFC 对话框。当 WinForm 对话框是 frontHWND 时,我总是为 GetParent 调用返回 NULL。我也试过 GetOwner 意识到 .Net 试图清理 Parent 和 Owner 之间的差异。查看带有 Spy++ 的 WinForm 对话框,它还说 WinForm 没有父级或所有者。我已经通过了
上面的代码没有设置 WinForm 的所有者。我尝试从 OnFormShown() 中的 WinForm 代码调用 Win32 SetParent,但锁定了 MFC 应用程序和 WinForm。
有人可以解释如何让我的非托管对话框/应用程序成为托管 winform 的所有者/父级吗?
wpf - WPF 用户控件中的键盘输入不会发送到 WinForms 容器
我们有一个 WinForms 应用程序,正在逐步转换为 WPF。此时应用程序的主窗体是一个窗体 (WinForm),其中包含 WPF 中内置的垂直侧边栏。侧边栏托管在 ElementHost 控件中。
在主窗体中,KeyPreview 设置为 true,我们重写 OnKeyDown() 以处理应用程序范围的键盘快捷键。当侧边栏获得焦点时,键盘事件不会发送到 OnKeyDown。
解决此问题的正确方法是什么?
wpf - 在 WinForms 容器中托管时,WPF ScrollViewer 不接收鼠标事件
我们有一个 WinForms 应用程序,正在逐步转换为 WPF。此时应用程序的主窗体是一个窗体 (WinForms),其中包含 WPF 中内置的垂直侧边栏。侧边栏托管在 ElementHost 控件中。
侧边栏由包含其他控件的 ScrollViewer 组成。问题是,当焦点位于 WinForms 时代的某个地方并且我在 ScrollViewer 上使用鼠标滚轮时,它不会滚动。
这与 WPF/WinForms 集成有关,因为在 100% WPF 项目中,即使焦点位于另一个控件上,ScrollViewer 也会对鼠标滚轮做出反应。
解决此问题的正确方法是什么?
c# - 用 C# 替换 Microsoft Word 97 中的文本
我正在编写一个程序,它部分地替换了 word 文档中的文本。目前,我正在引用 Microsoft.Office.Interop.Word 程序集,但是,在安装了 Word 97 的机器上运行该程序时收到错误消息。
一切都在我的开发机器上完美运行,但我需要它也可以与 Word 97 一起使用。有没有相当快速的解决方案?还是我的问题来自其他原因?此时我必须经历的唯一错误是“无法加载文件或程序集”Microsoft.Office.Interop.Word,Version=14.0.0.0,...”
我不一定需要它与更新版本的 Word 一起工作,但是,如果客户更新他们的 Word 版本,如果程序没有中断,那就太好了。有任何想法吗?
我从另一个没有太多知识的开发人员那里选择了这个项目。我需要对我的代码进行大量重新设计以使其与 Word 97 兼容吗?
wpf - Visual Studio 2010:在 VSPackage 工具窗口中使用 winforms 用户控件
在使用工具窗口创建简单的 VSPackage 时,会创建一个示例 WPF 用户控件并将其添加到工具窗口。这个用户控件必须是 WPF 的吗?我有一个 winforms 用户控件,当将其添加到工具窗口时,它没有显示出来。尝试在 WPF 中托管它但没有成功。有没有这样做的标准方法?
wpf - 托管嵌套的 WPF 用户控件时,WinForms 设计器失败
我将 VS2008 SP1 与 WPFToolKit v3.5.50211.1 一起使用。
我在类库项目中嵌套了 WPF UserControls,如下所示:
MainWpfUserControl
- 包含一个实例
NestedUserControl
DataGrid
其中包含来自 WPF Toolkit的一个实例。
同一个类库项目包含一个 WinForms UserControl 和一个承载MainWpfUserControl
.
在设计器中打开 WinForms UserControl 时,我遇到了奇怪的错误。经过一番挖掘(捕获并记录NestedUserControl
构造函数中抛出的异常),似乎抛出了如下异常:
[A]Microsoft.Windows.Controls.DataGrid 无法转换为 [B]Microsoft.Windows.Controls.DataGrid。类型 A 源自 'WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 在位置 'C:\Program Files\WPF Toolkit\v3.5.50211.1\WPFToolkit.dll' 的上下文 'LoadFrom' 中。类型 B 源自 'WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 在位置 'C:\Documents and Settings\...\Local Settings\Application Data\Microsoft\VisualStudio 的上下文 'LoadNeither' \9.0\ProjectAssemblies\zfh65-u101\WPFToolkit.dll'
有没有人经历过类似的事情?
更新
通过将 WPFToolkit.dll 放入 GAC,我似乎已经成功地解决了这个问题。但出于其他原因,这是不可取的(例如,CopyLocal 现在默认为 false)。所以看来问题与加载上下文有关。有没有办法控制这个?
wpf - WPF 重绘问题
我在重绘我的 WPF 控件时遇到问题。
WPF 控件添加为 Windows 窗体的 ElementHost.Child。
当 Windows 7 进入省电模式并恢复正常时(通过移动鼠标或键盘上的按键),其余的 Windows 窗体控件被重新绘制,但是 WPF 部分没有被重新绘制(并且 Win 7 背景在那个区域)。
在应用程序的最小化和最大化时,WPF 部分被重新绘制。
有人对这个问题有任何想法吗?
c# - C# - 我的应用程序和与外部应用程序的互操作性 (DLL/COM)
我一直在开发一个使用 DLL 与外部数据库应用程序互操作的 C# 应用程序。
这个外部应用程序与我的 C# 应用程序同时启动,并且只要我的 C# 应用程序正在运行就可用。
现在真正的问题与管理我需要创建以与外部应用程序交互的对象有关。
当我声明可从引用的 DLL 中获得的对象时,这些对象具有对文件(专有)进行操作并运行一些查询的方法(例如,是否通过此外部应用程序 GUI 执行此操作)。这些对象被“我”销毁,Marshal.ReleaseComObject(A_OBJECT)
而其他对象在不同的应用程序域中运行,通过使用AppDomain.CreateDomain("A_DOMAIN")
,执行操作并调用AppDomain.Unload("A_DOMAIN")
,释放用于操作的 DLL...
这些变通方法是为了确保此外部应用程序不会“阻止”这些操作中使用的文件,因此允许从文件夹中删除或移动它们。
例如
这两个“解决方案”都是通过反复试验达到的,因为我没有任何类型的 API 手册。这些解决方案是否正确?你能解释一下不同之处吗?我真的需要同时使用这两种解决方案还是一个就足够了?
谢谢!