1
Progress progress = new Progress();//progress.DialogResult is OK.
if (progress.ShowDialog() != DialogResult.OK)
{//progress.DialogResult is cancel.
    throw new ArgumentException();
}

在调试器中它说结果是 DialogResult.Cancel。为什么是这样?我有一个只有进度条和标签的表单。而已。如果这很重要,我也已经打开和关闭了其他一些表格。表格打不开。

进度类:

public partial class Progress : Form
{
    public Progress()
    {
        InitializeComponent();
    }

    bool filesLength = false;

    public void OnWordsChanged()
    {
        if (!filesLength)
        {
            progressBar1.Maximum = Program.numberOfFiles;
            filesLength = true;
        }
        progressBar1.Value = Program.wordsDone;
    }
}

和设计师:

 partial class Progress
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.label1 = new System.Windows.Forms.Label();
        this.progressBar1 = new System.Windows.Forms.ProgressBar();
        this.SuspendLayout();
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(13, 13);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(35, 13);
        this.label1.TabIndex = 0;
        this.label1.Text = "label1";
        // 
        // progressBar1
        // 
        this.progressBar1.Location = new System.Drawing.Point(13, 30);
        this.progressBar1.Name = "progressBar1";
        this.progressBar1.Size = new System.Drawing.Size(259, 23);
        this.progressBar1.TabIndex = 1;
        // 
        // Progress
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(284, 261);
        this.Controls.Add(this.progressBar1);
        this.Controls.Add(this.label1);
        this.Name = "Progress";
        this.Text = "Progess";
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.ProgressBar progressBar1;
}
4

1 回答 1

1

这是正常行为。您可以参考这个答案和来自Form.DialogResult Property

当窗体显示为模式对话框时,单击关闭按钮(窗体右上角带有 X 的按钮)会导致窗体隐藏并且 DialogResult 属性设置为 DialogResult.Cancel。当用户单击对话框的关闭按钮或设置 DialogResult 属性的值时,不会自动调用 Close 方法。相反,该表单被隐藏并且可以在不创建对话框的新实例的情况下再次显示。由于这种行为,当您的应用程序不再需要该表单时,您必须调用该表单的 Dispose 方法。

默认情况下,当您关闭表单时,它将具有 DialogResult.Cancel ,除非它被覆盖。

于 2016-04-30T07:13:44.253 回答