打开InputBox时Excel无响应,C#

3
我正在使用C#构建Excel插件,并希望用户选择一个范围。我已经设置好了输入框,当以文本形式输入时,它可以很好地接收到范围。
问题在于,当输入框处于打开状态时,Excel无响应,用户不能用鼠标切换到Excel并选择范围。在停止调试后,我会收到“文件现在可用”的消息。
以下是代码的一部分:
Excel.Range str = excelApp.InputBox("Select table range", "", _ 
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 8);
MessageBox.Show("range = " + this.range.get_Address());

你是说如果你在输入框中键入范围值,它可以工作,但如果你想使用鼠标选择,则无法工作? - bonCodigo
几乎准确,当我输入范围值时它确实有效。但是我无法使用鼠标选择,就像Excel卡住了,对任何操作都没有响应。 - Peter Green
你能在Excel本身中尝试吗?也就是说,在Excel模块中使用按钮,进行输入框,并尝试从Excel中选择范围?这样你就可以缩小问题范围,看看是Interop问题还是仅仅是Excel问题。 - bonCodigo
我真的不确定如何做你所说的事情。 当我进入一个简单的函数时,我可以选择一个范围。 我不知道如何在Excel中创建一个输入框。 - Peter Green
我的意思是在Excel VBA中进行一个简单的测试,以缩小问题的范围。我现在不在电脑前。但你可以尝试这个链接,获取一个小的VBA代码片段来测试Excel环境是否存在任何问题。参考将此代码放入VBA模块并编译它。如果你有问题,我回到电脑前会帮助你...或者希望其他人能帮忙。抱歉。 - bonCodigo
好的,我已经完成了,使用你提供的参考代码在 VBA 中创建了一个输入框,它可以正常工作,因此我理解问题不在 Excel 中。 - Peter Green
2个回答

2
这是完全按照设计和标准的 Windows 用户界面。InputBox 函数显示一个模态对话框。对话框总是禁用应用程序中的其他窗口,这非常令人烦恼,但也是一项重要的安全措施,以防止由于可重入性而导致的问题。此答案解释了为什么模态对话框会有这种行为。
您将不得不自己设计非模态输入表单来解决这个限制。请注意,当您这样做时可能会遇到麻烦,如链接答案所示。您不必担心用户关闭 UI 问题,因为这也会关闭该表单。但绝对需要注意用户重新发出命令的问题。

这是一个更好的解释,可以解决我曾经遇到的困惑。希望它对greenpeter有用。我很好奇是否能解决问题,因为他目前的代码看起来没有错误。 :) - bonCodigo
我认为我理解了问题,但我不太清楚需要做什么来解决它。作为初学者,希望能得到更多指导。 - Peter Green
不要解决它,用户已经熟悉对话框的工作方式。 - Hans Passant

0

谢谢,这个对我来说太高了,我是一个完全的新手。 - Peter Green
提供的链接中,教程就在那里 - 当你尝试某些东西时,你可以有很多乐趣:D 不过这取决于你有多少时间。最重要的是,你是否成功解决了问题,以及怎么解决的? - bonCodigo
不,我没有解决它。很不幸,我现在没有太多时间处理这个问题。 - Peter Green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接