C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.85323 の関連記事表示

<< 0 >>
■85323  Re[1]: ほんの稀に例外エラーがでる
□投稿者/ Azulean -(2017/10/07(Sat) 19:32:18)
    2017/10/07(Sat) 19:52:59 編集(投稿者)

    No85322 (みー さん) に返信
    > 例外が発生するところは,全画面の時のFormの幅を取得している601行で、
    > ActiveForm.getがnull・・・あとは忘れたのですが。取得に失敗している??
    > 全画面の幅を取得して7で割って日付のLabelの幅に代入しています。

    ActiveForm はそのアプリケーションのアクティブになっているフォームが帰ってくるプロパティですが、
    ほかのアプリケーションがアクティブになっているなど、状況によっては null を返します。
    ActiveForm が null を返してもうまく動くようにコードを書く必要があります。

    基本的には ActiveForm に依存する(ActiveForm を使う)ことは避けるべきです。
    今後のアプリケーションの拡張(たとえば、設定画面を追加するなど)を妨げることになるため。
    (設定画面を表示中など、LabelSizeChanged が予期せぬタイミングで呼び出される可能性がある)


    このコードが Form2 自身にある場合は、this を書くか、省略してそのまま
    自分自身の Width, Height プロパティを参照すればいい話です。

    int width7 = Width / 7;

    計算している箇所が Form2 自身ではなく、ユーザコントロールならば、
    ParentForm を参照したら良いでしょう。

    int width7 = ParentForm.Width / 7;

    計算している箇所が Form2 自身ではなく、自前のクラスなら、
    Form2 をあらかじめコンストラクタか何かで渡すようにしておいたら良い話です。

    private readonly Form _form;
    public DesktopCalendar(Form parentForm)
    {
    _form = parentForm;
    }

    private void LabelSizeChanged()
    {
    int width7 = _form.Width / 7;
    // 以下略
    }
記事No.85322 のレス /過去ログ146より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -