5

私は次のコードを持っています:

これは2番目のフォームを呼び出します

private void updateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Update fm = new Update();
            fm.ShowDialog();
        }

これはコンストラクターです

    public Update()
    {
        InitializeComponent();
    }

これが負荷です

    private void Update_Load(object sender, EventArgs e)
    {
        String ver = checkver();
        if (ver == "update")
        {
            if (RemoteFileExists(dlUrl) == true)
            {
                WebClient webClient = new WebClient();
                webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                webClient.DownloadFileAsync(new Uri(dlUrl), "");
            }
            else
                MessageBox.Show("An error occurred. Please try later.");
        }
        else if (ver == "newest")
        {
            MessageBox.Show("You are currently using the newest version.");
            this.Close();
        }
        else
        {
            this.Close();
        }
    }

私の問題は、関数の結果が2または3の場合、フォームがミリ秒で表示されてから閉じる(点滅する)ことです。フォームが点滅しないようにしたい。出来ますか?

this.Hide()this.Visible = Falseを使用しようとしましたが、何も役に立ちませんでした。

編集:私は元のコードを入れました編集2:より多くのコードを入れます

4

6 に答える 6

9

ロードする前にフォームを非表示にしてから、if else条件で表示できるように戻すことができます。例えば:

            MyForm myForm = new MyForm();
            myForm.Opacity = 0;
            myForm.Show();

その後:

if (ver == "update")
        {
            if (RemoteFileExists(dlUrl) == true)
            {
               myForm.Opacity = 100;
               ...

            }
            else
                MessageBox.Show("An error occurred. Please try later.");
        }
        else if (ver == "newest")
        {
            MessageBox.Show("You are currently using the newest version.");
            this.Close();
        }
        else
        {
            this.Close();
        }
于 2012-06-22T00:38:10.370 に答える
2

そもそもフォームを開くことを選択する前に、実行しているチェックを実行する必要があります。

だから次のようなもの:

if(funct() == "1")
{
    var form = new Form();
    form.ShowDialog();
}
于 2012-06-22T00:28:32.747 に答える
2

そうするための最良の方法:

private void Form_Load(object sender, EventArgs e) 
{ 
   switch(funct())
   {
      case 2:
         this.BeginInvoke(new MethodInvoker(this.Close));
          break;
      case 3:
         this.BeginInvoke(new MethodInvoker(this.Close));
           break; 
     default:
           MessageBox.Show("Something");
   }   
}
于 2013-07-22T08:44:39.460 に答える
1

Update_LoadはあなたのFormLoadハンドラーだと思いますか?これは、フォームが表示された後に呼び出されます。表示したくない場合は手遅れです。これに変更updateToolStripMenuItem_Clickします:

String ver = checkver();
if (ver == "update")
{
    if (RemoteFileExists(dlUrl))
    {
        Update fm = new Update();
        fm.ShowDialog();
    }
    else
        MessageBox.Show("An error occurred. Please try later.");
}
else if (ver == "newest")
{
    MessageBox.Show("You are currently using the newest version.");
}

そして、次のように変更Update_Loadします。

WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri(dlUrl), "");
于 2012-06-22T00:34:01.443 に答える
0

たぶん、最初にそれを非表示にしてから、funct()== "1"の場合にのみ表示します:

private void Form_Load(object sender, EventArgs e)
{
    this.Close();

    if (funct() == "1")
        MessageBox.Show("Something");
}
于 2012-06-22T00:22:06.090 に答える
0

これを試して

private void Form_Load(object sender, EventArgs e) 
{ 
   switch(funct())
   {
      case 2:
         this.Close();
          break;
      case 3:
          this.Close();
           break; 
     default:
           MessageBox.Show("Something");
   }   
}
于 2012-06-22T00:32:48.837 に答える