1

機能を追加する前に、次の行が機能しています。

    public MainForm()
    {
        InitializeComponent();
        refreshUI();
    }

次に、MainForm を表示する前に、welcomeBox を数秒間表示する必要がありました。だから私はこのようにコードを変更しました:

    System.Threading.Timer timer;
    GUI.WelcomeBox welcomeBox;
    public MainForm()
    {
        this.Visible = false;
        //Showing welcome box
        welcomeBox = new GUI.WelcomeBox();
        welcomeBox.Visible = true;
        this.Visible = false;

        timer = new System.Threading.Timer(new System.Threading.TimerCallback(delayedActions),null,5000,2000);
    }

    private void delayedActions(object o)
    {
        welcomeBox.Visible = false;
        welcomeBox.Close();
        timer.Dispose();

        InitializeComponent();
        // this line is unreachable, because of error
        refreshUI();
    }

でエラーが発生しましたInitializeComponent(): 問題イベント名: CLR20r3

  Problem Signature 01: todoweeklyshedule.exe
  Problem Signature 02: 1.0.0.0
  Problem Signature 03: 4fc5385b
  Problem Signature 04: System.Windows.Forms
  Problem Signature 05: 4.0.0.0
  Problem Signature 06: 4ba1e14e
  Problem Signature 07: a11
  Problem Signature 08: 1b
  Problem Signature 09: System.ArgumentException
  OS Version:   6.1.7601.2.1.0.768.3
  Locale ID:    1033
  Additional Information 1: a1ee
  Additional Information 2: a1ee2874cedcaa72f2a8419ddd18697e
  Additional Information 3: a319
  Additional Information 4: a319510eabcccf7de47b58017b885ff3

ちなみにMainFormはthis.Visible = false;線でも表示されます。MainForm() を呼び出しましたApplication.Run(new MainForm());が、これが理由ですか?

4

2 に答える 2

1

InitialiseComponents が呼び出されるまで可視に設定できません。おそらくこれをハックすることができますが、実際の問題はコードが間違った場所にあることです。

すべてを program.cs に移動し、Application.Run(new MainForm()); の前に呼び出します。私だったら、タイマーをウェルカムボックスに移動し、イベントハンドラーにそれを閉じて、モーダルでも表示させます。

実際にはそうではありません。私だったら、このようなことはしません。なぜなら、アプリケーションのユーザーを困らせることになるとわかっているからです。

于 2012-05-29T21:29:46.350 に答える
0

初期化コンポーネントをthis.visible=falseの前に移動します。

  public MainForm()
  {
    InitializeComponent();
    this.Visible = false;
    //Showing welcome box
    welcomeBox = new GUI.WelcomeBox();
    welcomeBox.Visible = true;
    this.Visible = false;

    timer = new System.Threading.Timer(new System.Threading.TimerCallback(delayedActions),null,5000,2000);

次善の策は、ウェルカムボックスをメインフォームにしてから、メインフォームに変更することです。これは少し書き直しますが、それだけの価値があります。

最後の提案は、メインフォームをロードし、ウェルカムボックスをshowdialog()として呼び出すことです。これは、タイマーが指示した後に閉じます。

于 2012-05-30T12:14:58.230 に答える