• ベストアンサー

C#で別のフォームのprogress barを操作

C#で進行状況を表示するプログレスバーを操作したいのですが、 form1にあるプログレスバーをform2から操作しようとすると プログレスバーの値は増えるのですが視覚的に進行状況が進みません。 どのようにすれば他のフォームから値だけではなく進行状況も操作できるのでしょうか? 開発環境:VC# 2005,Windows XP

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

その現象の出るコードの必要最低限の公開しても支障の無い部分を登校してみませんか Windowsのメッセージループに帰るならプログレスバーの表示も更新されそうですが

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

form1とform2はどのように表示させているのでしょう また form1のプログレスバーの操作をどのように行っていますか ProgresBarのModifiersプロパティを『Public』にして Form1のインスタンス経由でValueプロパティを変更してやれば更新されますよ Form2側のメソッド内でループしているなら Application.DoEventsを適当なタイミングで呼んでみましょう

0slowlykick0
質問者

補足

ご回答ありがとうございます。 form1からform2を呼び出している形です。 プログレスバーはPublicでform1のインスタンス経由でvalueプロパティを変更していますが、値は指定した値になるのですがプログレスバーが視覚的に進行していない状態です。

関連するQ&A

  • [C#.net]スレッド化された別フォームのプログレスバーの操作方法について

    こんちは。最近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)は、大して気にしていないのですが、これが致命的に足りない!とかいうのがあればご指導願います。 以上長々となりましたが、お暇な方お力を御貸しください

  • vc++2008の進行状況ダイアログ表示に関して

    現在VC++2008にて開発を行っております、C++初心者の者です。 モーダルダイアログを表示し、 そのダイアログの値を利用・表示した進行状況ダイアログを表示したいと考えています。 ・進行状況ダイアログに表示する値  現在作成ファイル数 / 総制作ファイル数  (プログレスバーの表示は考えていません。) ・現在、進行状況ダイアログはモーダレスダイアログを表示し、表示している値をforループ内で変更するような処理にしていますが、ダイアログには何も表示していません。 どのような処理にすればよろしいでしょうか。 宜しくお願いします。

  • 子フォームから親フォーム上のコントロールを操作したい

    VC++.NET(C++/CLI)にてアプリケーションを開発しております。 親フォーム(FormParent)と子フォーム(FormChild)があり 子フォームから親フォーム上にあるtextBox1を操作したいのですがうまくいきません。 親フォームからはFormChild.hをインクルードすることで 親フォームのインスタンスを得て、子フォームを表示させているのですが これに加えて子フォームからFormParent.hをインクルードすると循環参照(と言うのですか?) となる為にエラーになってしまいます。 よろしくお願いします。

  • C#でフォームの中にフォームを貼り付けたい

    C#(Visual Studio2005)でフォームの中にフォームを貼り付けたいのですが そういう事は可能でしょうか。 MDIではなく配置したいのです。 (MFCならCWndの中にCWndを作るように) private void Form1_Load(object sender, EventArgs e){ Form2 form2 = new Form2(); form2.parent = this; form2.top = 10; form2.left = 10; form2.Show; } これをやると ※「トップレベルのコントロールは追加できません。」という例外が発生します。 やりたいことは、フォームの中の子ウインドウを状況によってきりかえたいのですが。 宜しくお願い致します。

  • Visual C♯ フォーム間での値の受け渡し

    Visual C♯ フォーム間での値の受け渡しについて プログラミング初心者です。 今、勉強中なのですが、試行錯誤しても出来なかったので助けていただければと思います。 現在Visual C# 2008を使っております。 フォーム間の値の受け渡しについて、助言をお願いします。 [Form1] ・TextBox1 ・Button1 [Form2] ・TextBox2 ・Button2 1.Form1のButton1をクリックし、Form2を出す。 2.Form2のtextBox2に文字を入力し、Button2をクリックする。 3.Form1のTextBox1に、Form2のtextBox2に入力した文字を表示する。 という、作業をしたいのです。 できればソース付きで教えていただけると助かります。 よろしくお願いします。

  • 色の数値を別のフォームに引き渡したいです。

    色の数値を別のフォームに引き渡したいです。 Random rnd = new Random(); int red = rnd.Next(256); int green = rnd.Next(256); int blue = rnd.Next(256); このint redやint greenを新しく開くフォームにも同じ値を呼び出したいのですが、、、 よろしくお願いします。 開発環境はVC#2008です。

  • フォーム間での値の受け渡し

    プログラミング初心者です。 急な親の転勤で海外に行くことになって、全く言葉が通じない小学生並みに、私も言語がわかりません…。 現在Visual C# 2008でシステムの開発に携わっています。 フォーム間の値の受け渡しについて、助言をお願いします。 ネットで色々調べたのですが、小難しくて理解できませんでした。 [Form1] ・TextBox2 ・Button1 [Form2] ・TextBox2 1.Form1のTextBox1に値(文字)を入力して、Button1をクリックする。 2.Form2のtextBox2にTextBox1に入力された値(文字)が表示される。 という、作業をしたいのです。 できればソース付きで教えていただけると助かります。 よろしくお願いします。

  • Visual Studio 2005 C# フォームのせいでエラー?

    まず電話がかかってくると電話番号をもとに電話をかけてきたひとの情報をデータベースから取り出して表示するという簡素なウィンドウズプリケーションおVS2005,C#で書いてます。VSもC#使い始めて何週間かという初心者です。 メインのフォーム(フォーム1)があって、あるフォーム1にある値をユーザー変更するのに2つめのフォームをつかって入力できるようにしたのですが、閉じてから電話がかかってくるとbase.Dispose(disposing)というところでエラーになります(いつもここの個所がエラーになるみたいですが。。)。電話がかかってきて電話番号をしらべるときは、フォームにあるテキストボックスなどのコントロールやオブジェクトはクリアにしています。 2つめのフォームはフォーム1から Form2 form2 = new Form2(); form2.ShowDialog(this); で開いて フォーム2では (Form1)this.Owner)でフォーム1の値を変更したすぐに this.Dispose(); でフォーム2を閉じます。 試しにform2.Show(this);にして2つめのフォームを閉じないようにしたらエラーにはなりませんでした。 これだけの情報でわかるかどうかわかりませんが、フォーム2の扱いに問題あるのでしょうか? よろしくお願いします。

  • C#で違うフォームの子ウインドウを操作(移動)したい

    C#で違うフォームの子ウインドウを操作(移動)したいのですが、 そのようなことは可能でしょうか?

  • ActiveX.exeでモーダルフォーム

    標準EXEとして作成したForm1上のボタンを押すとActiveX.exeとして作成したForm2をForm1のモーダルフォームとして表示したいのですができません。 Form2の表示はできるのですがForm1も操作が可能でForm1をクリックすると,「コンポーネントを使用できません」とエラーが表示されてしまいます。 ActiveX.exeではなくActiveX.dllで作成すれば問題はないのですが,独立系としても使用できるようにするためにActiveX.exeとして作成しています。 開発環境はVB6.0+SP5, WindowsXP+SP2です。回答よろしくお願いします。

専門家に質問してみよう