前提・実現したいこと
WindowsアプリケーションをC#-VisualStudio2013で開発しています。
通常のイベントドリブン式では、正常に表示され、各ボタン押しで所望するアプリを実行していますが、これを人の手に依らず自動で処理しようとプログラムから、例えば、ボタン押し(this.button3.PerformClick();)で進めるようにすると、残りのボタン類やラベルが白色無地になってしまいます。どのようなテクニックで解決できるでしょうか?
発生している問題・エラーメッセージ
会話形式の時は、思うように表示される。
プログラムでボタン押しだと、他のボタンなどが白色無地に。
エラーメッセージ ```:なし。 ### 該当のソースコード this.button3.PerformClick(); ### 試したこと 「Thread.Sleep」や「Shown」、コントロールの「focus」などを試しましたが、うまく表示されません。 ### 補足情報(FW/ツールのバージョンなど) C#-VisualStudio2013で開発。
自分で作ったものならボタンを押さずに処理すればいいのでは?
ボタンを押さないで、ボタンクリック後の内容である次のステップ(サブのダイアログ画面で、入力処理等)をそのままコーディングして先に進めようとしたのですが、元の画面は白紙無地のままです。見栄えが悪いのです。どうも、他のコントロールを表示させる前に、指定したコマンドボタンの処理に走ってしまっているように思えます。
おそらく処理をしている間ウィンドウメッセージを受け付けていないからでしょうね。非同期を使うのが良いと思います。
回答ありがとうございます。
処理を順次、確実に行い、その間、ロックされていて良いと思っており、非同期より同期処理が良いのでは。と思っていますが、解釈が誤っているのでしょうか?指定するボタンの処理前に画面をすべて表示(白色無地のボタン類)して、その後、ロックさせれば思惑通りなのですが。
自動で処理するのであれば、フォームやダイアログなどいっさい表示せずに、必要な値の設定や計算などだけ行なえばいいと思います(それらの処理がUIにがっちり結びついていない前提で)。
画面に何か表示されないと不安なら、処理経過を示すラベルかテキストボックス(readonly)に経過を文字列で表示すればいい。
回答ありがとうございます。
ベーシック・スタンダードな処理方法では、それで良いと思っていますが、それを10倍100倍遅延させながら動的表現で行いたいと思っているのです。
イベントドリブン式では、ボタン類等コントロールが表示されて、次処理に向かえるのに、なぜ、プログラム内で行うと、フォーム内のボタン類等コントロールが非表示になるのか?コードなどのテクニックではなく、どれかのプロパティを設定すれば解決できるように思えるのですが?
回答2件
あなたの回答
tips
プレビュー