C# WinForms - 无法在文本框中键入某些键 (CorelDraw AddOn)
C# WinForms - Can't type some keys in TextBox (CorelDraw AddOn)
我无法成功解决 C# 中 TextBox 输入的奇怪行为。
环境
该项目是使用 Control AddOn 创建的,此类项目在 CorelDraw 菜单栏中创建一个按钮,如下所示
单击此按钮,我可以打开一个新的 Window 来操作和控制 CorelDraw 功能、自动执行任务等
https://marketplace.visualstudio.com/items?itemName=bonus630.CorelDrawDockerTemplate
问题
当我单击按钮并打开一个包含文本框的新 window 时,使用方法 .Show()
很奇怪,文本框不能正常工作,只能插入数字和特定字母,我不能'甚至按退格键删除内容。
但是,如果我使用 .ShowDialog()
方法打开 Window,一切正常,我可以在 TextBox 中输入任何内容!但是我无法阻止用户交互(ShowDialog 做到了),window 放在后面(CorelDraw window),用户需要访问 CorelDraw window 而无需在需要时关闭 AddOn .
谁能告诉我我错过了什么?或者解释为什么会这样?非常感谢任何帮助。
代码
ControlUI.xaml
<!-- Basic structure to create a button in CorelDraw menu bar (came with the extension) -->
<UserControl x:Class="MaisUmaTentativa.ControlUI"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MaisUmaTentativa"
mc:Ignorable="d"
Height="24" Width="24" Loaded="UserControl_Loaded">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/Colors.xaml"/>
<ResourceDictionary Source="Styles/Styles.xaml"/>
<ResourceDictionary Source="Resources/Images.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<!--button in menu bar goes here-->
<Button Content="A" Name="btn_Command" >
<Button.ToolTip>
<ToolTip>
<StackPanel>
<Label Content="Enter Caption" FontWeight="Bold" FontSize="12"/>
<Label Content="Click ME!" FontSize="11"/>
</StackPanel>
</ToolTip>
</Button.ToolTip>
</Button>
</Grid>
</UserControl>
ControlUI.xaml.cs (Code Behind)
using ...; // removed here to reduce code
using corel = Corel.Interop.VGCore;
namespace MaisUmaTentativa
{
public partial class ControlUI : UserControl
{
private corel.Application corelApp;
private Styles.StylesController stylesController;
public ControlUI(object app)
{
InitializeComponent();
try
{
this.corelApp = app as corel.Application;
stylesController = new Styles.StylesController(this.Resources, this.corelApp);
}
catch
{
global::System.Windows.MessageBox.Show("VGCore Erro");
}
// handle click in button placed at menu bar
// MainWindow is a WinForm with a TextBox and a Label
btn_Command.Click += (s, e) => {
MainWindow mainWindow = new MainWindow();
mainWindow.ShowDialog();
};
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
stylesController.LoadThemeFromPreference();
}
}
}
正如@Jimi 所说,问题确实是消息循环没有在我的 MainWindow
表单中启动。
我只是将 Application.Run(this);
放在 MainWindow 窗体的构造函数中,TextBox 错误就消失了。感谢帮助
我无法成功解决 C# 中 TextBox 输入的奇怪行为。
环境
该项目是使用 Control AddOn 创建的,此类项目在 CorelDraw 菜单栏中创建一个按钮,如下所示
单击此按钮,我可以打开一个新的 Window 来操作和控制 CorelDraw 功能、自动执行任务等
https://marketplace.visualstudio.com/items?itemName=bonus630.CorelDrawDockerTemplate
问题
当我单击按钮并打开一个包含文本框的新 window 时,使用方法 .Show()
很奇怪,文本框不能正常工作,只能插入数字和特定字母,我不能'甚至按退格键删除内容。
但是,如果我使用 .ShowDialog()
方法打开 Window,一切正常,我可以在 TextBox 中输入任何内容!但是我无法阻止用户交互(ShowDialog 做到了),window 放在后面(CorelDraw window),用户需要访问 CorelDraw window 而无需在需要时关闭 AddOn .
谁能告诉我我错过了什么?或者解释为什么会这样?非常感谢任何帮助。
代码
ControlUI.xaml
<!-- Basic structure to create a button in CorelDraw menu bar (came with the extension) -->
<UserControl x:Class="MaisUmaTentativa.ControlUI"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MaisUmaTentativa"
mc:Ignorable="d"
Height="24" Width="24" Loaded="UserControl_Loaded">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/Colors.xaml"/>
<ResourceDictionary Source="Styles/Styles.xaml"/>
<ResourceDictionary Source="Resources/Images.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<!--button in menu bar goes here-->
<Button Content="A" Name="btn_Command" >
<Button.ToolTip>
<ToolTip>
<StackPanel>
<Label Content="Enter Caption" FontWeight="Bold" FontSize="12"/>
<Label Content="Click ME!" FontSize="11"/>
</StackPanel>
</ToolTip>
</Button.ToolTip>
</Button>
</Grid>
</UserControl>
ControlUI.xaml.cs (Code Behind)
using ...; // removed here to reduce code
using corel = Corel.Interop.VGCore;
namespace MaisUmaTentativa
{
public partial class ControlUI : UserControl
{
private corel.Application corelApp;
private Styles.StylesController stylesController;
public ControlUI(object app)
{
InitializeComponent();
try
{
this.corelApp = app as corel.Application;
stylesController = new Styles.StylesController(this.Resources, this.corelApp);
}
catch
{
global::System.Windows.MessageBox.Show("VGCore Erro");
}
// handle click in button placed at menu bar
// MainWindow is a WinForm with a TextBox and a Label
btn_Command.Click += (s, e) => {
MainWindow mainWindow = new MainWindow();
mainWindow.ShowDialog();
};
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
stylesController.LoadThemeFromPreference();
}
}
}
正如@Jimi 所说,问题确实是消息循环没有在我的 MainWindow
表单中启动。
我只是将 Application.Run(this);
放在 MainWindow 窗体的构造函数中,TextBox 错误就消失了。感谢帮助