0

ラベル、DatetimePicker、および [OK] ボタンを含む疑似ダイアログ (FormBorderStyle プロパティが FixedDialog に設定されたフォーム) を作成しました。[OK] ボタンの DialogResult プロパティは "OK" です

この投稿からの適応: How to return a value from a Form in C#? 、アプリがファイル名で日付を推測できない場合に、ユーザーに日付を選択するように求める方法を作成しようとしています (ファイル名が「適切な形式であるかどうかによって、できる場合とできない場合があります。 ."

コードは以下です。

問題は、フォームが呼び出されたときにコントロールが表示されないことです。そして、StartPosition = CenterScreen であるにも関わらず、画面の中央に表示されません...???

public partial class ReturnDate : Form {

public DateTime ReturnVal { get; set; }
private String _lblCaption;

public ReturnDate() {
    InitializeComponent();
}

public ReturnDate(String lblCaption) {
    _lblCaption = lblCaption; // "Object not set to an instance of an object" if I try to set the Label here directly
}

private void buttonOK_Click(object sender, EventArgs e)
{
    this.ReturnVal = dateTimePicker1.Value.Date;
    this.Close(); 
}

private void ReturnDate_Shown(object sender, EventArgs e) {
    labelCaption.Text = _lblCaption;
}

}

...そして、条件付きで次のように呼び出します。

public static DateTime getDateTimeFromFileName(String SelectedFileName) {
    // Expecting selected files to be valid pilsner files, which are expected
    // to be of the format "duckbilledPlatypus.YYYY-MM-DD.pil" such as:
    // "duckbilledPlatypus.2011-06-11.pil"
    const int DATE_BEGIN_POS = 19;
    const int DATE_LENGTH = 10;

String substr = string.Empty;
if (SelectedFileName.Length >= DATE_BEGIN_POS + DATE_LENGTH) {
    substr = SelectedFileName.Substring(DATE_BEGIN_POS, DATE_LENGTH);
}
DateTime dt = DateTime.Now;
if (!(DateTime.TryParse(substr, out dt))) {
    using (var dtpDlgForm = new ReturnDate("Please select the Date that the file was created:")) {
        DialogResult dr = dtpDlgForm.ShowDialog();
        if (dr == DialogResult.OK) {
            dt = dtpDlgForm.ReturnVal;
        } 
    }
}
return dt;

}

4

1 に答える 1

2

新しいコンストラクター オーバーロードをフォーム (または任意の派生コントロール) に追加する場合は、デザイナーが生成したコードInitializeComponent()が呼び出されることを確認する必要があります。

新しいコンストラクターが最初にデフォルトのコンストラクターを呼び出すようにします: this()

public ReturnDate(String lblCaption) : this()
{
    _lblCaption = lblCaption; 
}
于 2012-06-05T00:04:55.590 に答える