こんちは。最近C#をやり始めて行き詰まったので質問致します。
質問内容に対する答えをお持ちの方がいらっしゃいましたら、お暇な時にでもお答えください。
public Class SumLoop {
public Keisan(int Cnt, string Msg) {
// (1)プログレスバーのフォーム生成時に変数Cntをプログレスバーの最大値、変数Msgをフォームのタイトルに設定したい。
FormProgress FrmPro = new FormProgress();
Thread thread = new Thread(new ThreadStart((2)) );
thread.Start();
for(int i=0; i<Cnt; i++) {
// (3)このiがインクリメントする度にプログレスバーのValueを増やしたい
// FrmPro.SetProgressValue(i) // これだとコンパイラに怒られた
// ここに主な処理
}
}
public partial class FormProgress : System.Windows.Forms.Form {
public FormDfmProgress() { InitializeComponent(); }
// (3)これではダメみたい
public void SetprogressValue(int iValue) {
progressBar1.Value = iValue;
progressBar1.Refresh();
}
// (4)他のイベントが必要?
}
ざっと汚いコードを書きましたが具体的にお知恵を貸して頂きたいところは
(1)のフォーム生成時のパラメータをどう与えるのか?
インスタンス作成の際にここで言うFormDfmProgressをthisで継承させオーバーロードさせれば良いんでしょうか?
(2)プログレスバーのフォームを表示させたいだけなのですが、.ShowDialog()では怒られ、.Showでは即座にフォームが消えたりでどうにもなりません。スレッドが消えるまで表示させるにはどうしたらいいでしょう?
(3)フォーム側のプログレスバーのValueなり、変数なりをスレッド稼動中に更新させるにはどうしたらいいでしょうか?
(4)は、大して気にしていないのですが、これが致命的に足りない!とかいうのがあればご指導願います。
以上長々となりましたが、お暇な方お力を御貸しください
No.2
- 回答日時:
この部分は スレッド作成するイベント側で記述します
Thread thread = new Thread(new ThreadStart((2)) );
thread.Start();
(2)はデリゲートを指定しますので 引数なしのデリゲート用関数を用意します
FormProgressのキャプション(タイトル)の変更は Textプロパティでできます
Public Class SumLoop
{
public int nCnt = 0;
public String sMsg = "";
public void keisan()
{
FromProgress frm = new FormProgress();
frm.Text = sMsg;
frm.setProgrssMax( nCnt );
frm.Show();
for( int i = 0; i < nCnt; i++ ) {
frm.setProgressValue( i );
Thread.Sleep( 10 );
}
}
}
ProgessBarの最大値は Maximumプロパティを操作するので 外部から扱えるようにメソッドを追加しましょう
public void setProgressMax( int nMax )
{
progressBar1.Maximum = nMax;
}
スレッド起動側のイベントで
SumLoop objSL = new SumLoop();
objSL.nCnt = 200;
objSL.sMsg = "タイトル";
Thread thread = new Thread( new ThreadStart( objSL.Keisan ) );
thread.Start();
といった具合でしょう
わざわざコードまで付けて頂いて恐縮です。
ただ、こちらの方法では計算(Keisanメソッド)をスレッド化するようです。
私のコードと質問内容の書き方が悪いといえばそれまでですが
Keisanメソッドが言わばMainのような形で、フォームやらその他のメソッドは常にKeisanメソッドの従としたいのでした。
後学の参考とさせて頂きます。
No.1
- 回答日時:
こういうときには、BackgroundWorker という便利なものがありますので、そちらを使いましょう。
http://www.atmarkit.co.jp/fdotnet/dotnettips/436 …
http://msdn.microsoft.com/ja-jp/library/system.c …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# タスクバーを隠したフォーム...
-
書式の設定
-
C# : MouseイベントでGraphics
-
全取得したデータをjspで順番に...
-
実数からの小数部の取得
-
c# デリゲート関連の命名について
-
javaで電卓を作りたいのですが...
-
ダブルクォーテーションのrepla...
-
ArrayList内HashMapの取得
-
文字コード判別ルーチンGet...
-
javaのCSVデータ読込についてです
-
ArrayListを利用する問題
-
VB6,論理演算子Orの使い方がわ...
-
csv出力について
-
Selenium IDEでexportしたコー...
-
ページング
-
yyyymmddからyyyy/mm/d...
-
ArrayList でスタックを
-
Java int sum = 0は必要ですか?
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
Processingでマウスクリックで...
-
C#でのWNetAddConnection3の使...
-
ボタンのイベントで異なるウィ...
-
C#で別のFormへ複数の値を返そ...
-
GetDIBits関数の使い方について
-
【Java】画像表示が出来ない!
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# MouseHoverを何度も呼ぶには
-
C# DataGridView列カスタマイズ
-
正規表現
-
unityでのC++エラーの原因がわ...
-
C# visibleプロパティをfalseに...
-
C# 矢印キーの取得
-
C#から、C++で作成したdll内の...
-
C#でキーイベントが発生しない...
-
JavaFXでの表内のチェックボッ...
おすすめ情報