【问题标题】:Making a form halt other program activity like a messagebox (in VB.NET)使表单停止其他程序活动,如消息框(在 VB.NET 中)
【发布时间】:2023-03-26 20:35:01
【问题描述】:

我想创建一个自定义表单(在 Visual Basic .NET 中),它将停止其他进程响应,直到表单被确认。如果我可以在显示此表单的同时尝试访问主程序 UI 时添加哔声(就像消息框一样),那将是一个很好的奖励。

我最初的想法是为消息框类型的表单创建另一个线程并让主线程休眠直到消息框类型的表单也得到响应,但是我认为这会在主程序上创建类似错误的外观根本不会响应或更新其 UI(同样值得注意的是,我几乎没有使用多线程的经验,所以这可能是不正确的)。

我真的不知道如何进行此操作,非常感谢任何想法和/或指导。谢谢你! :)

【问题讨论】:

    标签: vb.net winforms multithreading messagebox


    【解决方案1】:

    我认为这种类型的行为是有 ShowDialog() 的行为

    此示例位于 ShowDialog() 的 MSDN 页面上

    Public Sub ShowMyDialogBox()
        Dim testDialog As New Form2()
    
        ' Show testDialog as a modal dialog and determine if DialogResult = OK.
        If testDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
            ' Read the contents of testDialog's TextBox.
            txtResult.Text = testDialog.TextBox1.Text
        Else
            txtResult.Text = "Cancelled"
        End If
        testDialog.Dispose()
    End Sub 'ShowMyDialogBox
    

    当代码调用 ShowDialog() 时,程序在 testDialog 上继续,并且仅当您的用户按下 OK、Cancel、Close 或任何方法时退出,在调用的对话框中,将属性 DialogResult 设置为与 DialogResult 不同的任何值。没有。

    【讨论】:

    • 谢谢!这很有帮助!现在我希望我的结果非常取决于表单中按下的按钮,但是目前它似乎总是返回值 2。有没有办法更改哪些按钮从 showdialog() 方法返回什么值?
    • 哦,我想我找到了:我会使用对话框结果属性并将其设置为任何值,具体取决于作为每个按钮的 button.click 事件处理程序的一部分按下的按钮?
    • 正确,使用按钮的 dialogresult 属性并设置为 OK、Cancel 等...然后,当按下时,该值是 ShowDialog() 的返回值。如果您觉得我的回答可以接受,请mark as correct
    • 唯一的事情:它似乎只喜欢某些结果(dialogresult 枚举中的那些)。除了更多/其他值之外,我有什么方法可以做到这一点,还是有其他方法可以做到这一点?
    • 在这种情况下,您应该在表单代码中创建一个公共(整数)属性。在退出表单之前将此属性设置为所需的值。在 Dispose() 之前,该属性将在表单外可见(例如,如上例中的 testDialog.TextBox1.Text)
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    相关资源
    最近更新 更多