2

フォームの読み込み時に、フォームXを開くか閉じるかを決定するために、多くのチェックを行う必要があります。以下は簡単な例です。

public partial class BaseForm : Form
{
  private void BaseForm_Load(object sender, EventArgs e)
  {
    if(!IsUserValid())
      MessageBox.Show("User is not valid");
  }
  private bool IsUserValid()
  {
    List<string> allowedUsernames = new List<string>();
    using (SqlConnection con = new SqlConnection(_connectionString))
    {
      //Get a list of usernames, none of which are "Developer" usernames
    }
    return allowedUsernames.Any(username => username == Environment.UserName);
  }
}
public partial class DerivedForm : BaseForm
{

}

上記の例では、ユーザー名に関係なく、フォームをデザイナーに完全にロードできます。別のフォームを実行してベースを継承する場合、それDerivedFormは呼び出して、デザイナーにアクセスできない設計モードをLoad表示しMessageBox、次にデザイナーにアクセスできないフォームを表示します。 ?あなたが継承をしている場合、ロードイベントを使用しないことは賢明でしょうか?CloseWindowsFormLoadWindowsForms

私はこれが変だと思っただけです、誰か知っていますか?

4

1 に答える 1

1

同様の問題に対処する別の質問があります。また、受け入れられた答えは、この動作を克服するための解決策を提供します:https ://stackoverflow.com/a/2427420/674700 。

基本的に、あなたの場合、DesignTimeHelperクラスを追加し、次の変更を使用して違いを確認します。

private void BaseForm_Load(object sender, EventArgs e)
{
    if (!DesignTimeHelper.IsInDesignMode)
    {
        if (!IsUserValid())
        {
            MessageBox.Show("User is not valid");
        }
    }
    else
    {
        MessageBox.Show("Called from VS");
    }
}
于 2013-02-13T15:32:01.270 に答える