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

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

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

No.85322 の関連記事表示

<< 0 >>
■85322  ほんの稀に例外エラーがでる
□投稿者/ みー -(2017/10/07(Sat) 19:15:33)

    分類:[C#] 

    2017/10/07(Sat) 19:28:12 編集(投稿者)

    お世話になります。

    開発環境
    EPSON エンデバー AY320S
    Celeron G530
    メモリ 4GB
    グラボはなしで、1920x1080、1440x900のディスプレイを接続(ディスプレイにどれだけメモリを消費しているか不明、何bitカラーとかいうのがでてこない)
    大概youtubeを聞きながら作業しているので、メモリ使用量は60〜80%くらい、CPU使用率も50%〜90%くらい

    Windows 10 Pro 64bit
    ver 1703
    OSビルド 15063.608

    Visual Studio Community 2017を1ヶ月くらい前にインストールした初心者です。
    現在C#でカレンダーを作成しています。
    徐々に機能を増やしているのですが、稀に例外でストップして起動しないのです。
    今回もエラーの状況をスクショしようと20回くらい起動しましたが、出ませんでした。

    カレンダーの外観、例外が発生するところは
    http://ty21ky.web.fc2.com/C_Sharp/error.html
    全画面で壁紙のように使用しています。
    カレンダーの文字はすべてLabelを使用しています。

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

    いくら考えてもエラーがでる所じゃないような気がして。

    よろしくお願いいたします。
親記事 /過去ログ146より / 関連記事表示
削除チェック/

■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より / 関連記事表示
削除チェック/

■85324  Re[2]: ほんの稀に例外エラーがでる
□投稿者/ ??[ -(2017/10/07(Sat) 19:50:22)
    No85323 (Azulean さん) に返信
    > 2017/10/07(Sat) 19:44:38 編集(投稿者)

    ありがとうございます。
    教えて頂いたように頑張ってみます。

    >
    > ■No85322 (みー さん) に返信
    >>例外が発生するところは,全画面の時のFormの幅を取得している601行で、
    >>ActiveForm.getがnull・・・あとは忘れたのですが。取得に失敗している??
    >>全画面の幅を取得して7で割って日付のLabelの幅に代入しています。
    >
    > ActiveForm はそのアプリケーションのアクティブになっているフォームが帰ってくるプロパティですが、
    > ほかのアプリケーションがアクティブになっているなど、状況によっては null を返します。
    > ActiveForm が null を返してもうまく動くようにコードを書く必要があります。
    >
    > 基本的には ActiveForm に依存する(ActiveForm を使う)ことは避けるべきです。
    > 今後のアプリケーションの拡張(たとえば、設定画面を追加するなど)を妨げることになるため。
    > このコードが 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 のレス / END /過去ログ146より / 関連記事表示
削除チェック/

■85326  Re[3]: ほんの稀に例外エラーがでる
□投稿者/ ??[ -(2017/10/07(Sat) 22:34:20)
    No85324 (??[ さん) に返信
    > ■No85323 (Azulean さん) に返信
    >>2017/10/07(Sat) 19:44:38 編集(投稿者)
    >
    > ありがとうございます。
    > 教えて頂いたように頑張ってみます。

    Widthだけで良かったんですね。
    最初は自分なりに考えて、うまくいかず解説本・ネットで探して最終的にActiveFormで動いたんで喜んでいたんですが。
    先が長いですね。
    本当にありがとうございました。

    > int width7 = Width / 7;
記事No.85322 のレス /過去ログ146より / 関連記事表示
削除チェック/

■85332  Re[4]: ほんの稀に例外エラーがでる
□投稿者/ ??[ -(2017/10/09(Mon) 11:36:59)
    No85326 (??[ さん) に返信
    > ■No85324 (??[ さん) に返信
    >>■No85323 (Azulean さん) に返信
    > >>2017/10/07(Sat) 19:44:38 編集(投稿者)
    >>
    >>ありがとうございます。
    >>教えて頂いたように頑張ってみます。
    >
    > Widthだけで良かったんですね。
    > 最初は自分なりに考えて、うまくいかず解説本・ネットで探して最終的にActiveFormで動いたんで喜んでいたんですが。
    > 先が長いですね。
    > 本当にありがとうございました。
    >
    >>int width7 = Width / 7;
記事No.85322 のレス / END /過去ログ146より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -