Visual Studio 2005 C# フォームのエラーとは?

このQ&Aのポイント
  • Visual Studio 2005 C# フォームを使用している際にエラーが発生してしまっています。フォーム1とフォーム2を連携させる際に問題が生じているようです。
  • フォーム1とフォーム2の間でデータのやり取りを行っており、フォーム2を閉じる際にエラーが発生しています。
  • フォーム2でフォーム1の値を変更しようとした際にエラーが発生しており、この問題に対して解決策を求めています。
回答を見る
  • ベストアンサー

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の扱いに問題あるのでしょうか? よろしくお願いします。

  • qdoba
  • お礼率81% (9/11)

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

  • ベストアンサー
  • aigaion
  • ベストアンサー率47% (287/608)
回答No.1

これだけの情報でさっするのは無茶ですね。 電話がかかってきたらプログラムに電話番号がわたされる? フォーム1は何のためにあるの? フォーム2は何のためにあるの? どういうときに利用するの? フォーム2はフォーム1の何を変更するの? エラーがになる→なんというエラーがでるの? エラーはそのままコピペ 謎だらけです。 Form2で値をForm1に渡すときに参照だけ渡して実体をコピーしなかったためにForm2を破棄した後にない物を参照しようとしてエラーがでる。 くらいしか予測できませんねぇ。 ソースコード晒してもらうのが早いかもですね。

参考URL:
http://www.divakk.co.jp/aoyagi/csharp_tips_valref.html
qdoba
質問者

お礼

補足のところでお礼を書くのわすれてました。お返事をどうもありがとうございます。

qdoba
質問者

補足

とりあえず返事をもらえてとてもうれしいです。 電話はCOMオブジェクト?っていうのでしょうかもともと用意されてたInterop.QmCOM.dllとかいうものを使って電話のオブジェクトをつくって、電話がかかってくるとイベントを通して電話番号がわかるんです。その電話番号をパラメーターとしてlookupという関数を自分で書いたのですが、lookupはフォームをまずクリアして電話番号もとにデータベースから名前や住所などの情報をとりだしてきて 、フォーム1に書き出すんです。フォームのクリアはテキストックスを=""にしたりします。 フォーム2はデータベースから抽出するときの条件の1つを変更するものでフォーム1の上にあるコントロールではないのですが、フォーム1のクラス内の変数です。 エラーメッセージですが、トライキャッチで例外をメッセージボックスに書き出してみました。これをみてもわたしには ちょっとわかりません。 System.ArgumentException: Parameter is not valid. at System.Drawing.Region.GetHrgn(Graphics g) at System.Windows.Forms.Control.Invalidate(Region region, Boolean invalidateChildren) at System.Windows.Forms.LinkLabel.InvalidateLink(Link link) at System.Windows.Forms.LinkLabel.OnLostFocus(EventArgs e) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.Label.WndProc(Message& m) at System.Windows.Forms.LinkLabel.WndProc(Message& msg) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.IntDestroyWindow(HandleRef hWnd) at System.Windows.Forms.UnsafeNativeMethods.DestroyWindow(HandleRef hWnd) at System.Windows.Forms.NativeWindow.DestroyHandle() at System.Windows.Forms.Control.DestroyHandle() at System.Windows.Forms.Control.Dispose(Boolean disposing) at System.Windows.Forms.Form.Dispose(Boolean disposing) at PhonePopup.Form1.Dispose(Boolean disposing) in C:\Documents and Settings\mxs001\My Documents\Visual Studio 2005\Projects\PhonePopup\PhonePopup\Form1.Designer.cs:line 33

関連するQ&A

  • C#でのフォーム間のデータの受け渡しについて

    フォーム間のデータ(パラメータ等)の受け渡しについて教えてください。 現在Form1からForm2を起動させる場合、以下のようにForm2のインスタンスの生成時のパラメータを設定してもForm2のLoadイベントでは拾うことはできないのでしょうか? ↓実際のコード //Form1クラスのインスタンスを作成する //引数(a,b) Form2 f = new Form2(a,b); //Form1を表示する //ここではモーダルダイアログボックスとして表示する //オーナーウィンドウにthisを指定する f.ShowDialog(this); //フォームが必要なくなったところで、Disposeを呼び出す f.Dispose(); また、上記の方法が違っていた場合、方法としてどのようなやり方があるのか教えてください。 よろしくお願いいたします。

  • 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に入力した文字を表示する。 という、作業をしたいのです。 できればソース付きで教えていただけると助かります。 よろしくお願いします。

  • WindowsFormの消去について(C#)

    こんにちわ。 C#(WindowsForm)で以下のような処理を考えています。 1.起動するとForm1(ログイン画面)が開く 2-1.認証に成功 → 3へ 2-2.認証に失敗 → メッセージを表示し、ログイン画面のユーザ名にフォーカスをセット 3.Form3(メインメニュー)を開く そこで、スタートアップの画面は、Form1で良いと思うのですが、 2-1の場合に、以下のようなコードを書いてみました。 *************************************** Form3 f = new Form3(); f.ShowDialog(this); f.Dispose(); this.Close(); *************************************** これでは、次の部分で目的を達成できませんでした。 A.Form3をShowDaialog(this)で開くと、モーダルモードで開くだけとなってしまう。 Showではモードレスとなるだけ。 B.Dispose、Closeを記述してみたが、Form3が開いた時に、 画面上からForm1が消えるわけではない。 Closeでは、システム自体が終了してしまう。 そこで、ShowDialogやShowではなく、Form1を消し、Form3を表示するメソッド等あるのでしょうか? ちなみに、Form3をCloseした場合に、Form1を再度呼び出す処理は考えていません。

  • C# 2010 PrintPreViewDialogの連続表示について

    C# 2010 PrintPreViewDialogの連続表示について NotifyIconからPrintPreViewDialogを表示して印刷します 印刷が完了してもDialogは表示されています この表示中にNotifyIconを再度押すと(1)で下記のエラーとなります 『既に表示されているフォームをモーダルダイアログボックスとして表示できません showDialogを呼び出す前にフォームのvisibleプロパティをfalseにしてください』 となりますが、Form1、printPreviewDialogのプロパティにはVisibleが見当たりません 何処をどうすれば良いのでしょうか? また印刷が完了した後にDialogを消去して、NotifyIconを押すと同じく(1)でエラーが発生します 『破棄されたオブジェクトにアクセスできません』 じゃあ、全体的にどのようにすれば良いのですか? この件に連休前からハマリ込んでおります、お助けください!!! private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.printPreviewDialog1.Document = this.printDocument1; printPreviewDialog1.ShowDialog(); -----(1) printPreviewDialog1.Close(); -----(2) } 追伸】(2)はDisposeのほうが良いのですか? それとも不要なのですか?

  • Visual C# .NETのShowDialog()について

    初めまして。最近、C#を始めた者なのですが、 以下の質問をお分かりの方はお手数ですが教えて下さい private void sendButton_Click(object sender, System.EventArgs e){ Form2_2 f22 = new Form2_2(this, m1.Text, m2.Text); if(f22.count == 0){ f22.ShowDialog(); } else{ m1.Text == ""; m2.Text == ""; } } で、このsendボタンを押した後、モーダルダイアログを表示させて、条件に合わない場合はこのフォームに戻り、条件に合えばそのモーダルを開くという事を行いたいのです。 そして今判らないのが、条件にあった際、モーダルは開いたままで、現在のフォームは閉じたいのですが、this.Close(); としても反応がありません。 これはどうしてなのでしょうか? かつ、どうすればこれは解消されるのでしょうか? 長々と失礼しました

  • C# form

    Button _Button = (Button)sender; int but = 0; if (_Button.Name == "button1") { but = 1; } if (_Button.Name == "button2") { but = 2; } if (_Button.Name == "button3") { but = 3; }      //Form2クラスのインスタンスを作成する Form2 f2 = new Form2(this); //Form2を表示する //ここではモーダルダイアログボックスとして表示する ////オーナーウィンドウにthisを指定する //f.ShowDialog(this); //フォームが必要なくなったところで、Disposeを呼び出す f2.Show(); 上記のようにボタン配列を作成し,クリックイベントを発生させています.そこで押されたボタンにより butに所定の値を入れてこれを,form2において判断値として使用したいのですが,どのようにすれば 良いでしょうか? 昨日から悩んでいるのですが自分だけでは解らないのでご教示願いたいと思います.

  • C#でテキストボックスをクリック→フォームが開く→フォームで設定した値

    C#でテキストボックスをクリック→フォームが開く→フォームで設定した値を元のテキストボックスに入力 こんな感じのことをC#でやりたいのですがよくわからないので教えてください。 1. 親をForm1、子をForm2とします 2. Form1のTextBox1をクリックするとForm2が開いきます 3. Form2で設定した値をForm2の「入力」ボタンを押すとForm2が閉じてTextBox1に値が入力されます というものです。 ここで、textBoxは「クリックしたコントロール名を取得してForm2に渡したい」のです。 テキストボックスがたくさんあるので、textBox1とか決まった名前ではありません。 この部分がわからないのです。 ------------------------------------------------------- Form1: private void textBox1_Click(object sender, EventArgs e) {  Form2 fromItem = new Form2(sender);  DialogResult deRet = fromItem.ShowDialog(); } Form2: public Form2(object sender) {  InitializeComponent();  object pSender = sender; } private void button_input_Click(object sender, EventArgs e) {  ((System.Windows.Forms.TextBox)pSender).text = "hoge"; } ------------------------------------------------------- この程度しかわかりません。 正しい方法を教えてください。よろしくお願いいたします。

  • フォームのテキストコントロールへの出力

    Cは分かりますが、C++初心者です。 よろしくお願いします。 namespace sample1 外にある関数から、フォームのコントロールにアクセスするには、 どうしたらいいのでしょうか? ========================================================== #pragma once void DspData( ReadData *readdata ); //コールバック関数宣言 namespace sample1 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public __gc class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); } protected: void Dispose(Boolean disposing) { if (disposing && components) { components->Dispose(); } __super::Dispose(disposing); } private: System::Windows::Forms::Label * label1; private: System::Windows::Forms::Button * start; private: System::Windows::Forms::Button * end; public: System::Windows::Forms::TextBox * textBox1; private: System::ComponentModel::Container * components; void InitializeComponent(void) { } private: System::Void start_Click(System::Object * sender, System::EventArgs * e) { } }; } //------------------------------------------------ // DspData //------------------------------------------------ void DspData( ReadData *readdata ) { //***↓ここでフォームのテキストボックスへの表示を行いたい。***** textBox1->set_text("ここで出力") return; } ==========================================================

  • 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; } これをやると ※「トップレベルのコントロールは追加できません。」という例外が発生します。 やりたいことは、フォームの中の子ウインドウを状況によってきりかえたいのですが。 宜しくお願い致します。

  • c#で次の次のフォームへのデータの渡し方

    c#で次の次のフォームへのデータの渡し方 お世話になります。 c#初心者です。 フォーム1にはbuttonが2つあり、どちらを押したかで 次(フォーム2)の次のフォーム(フォーム3)を開く時に そのフォームにあるボタンを表示させるか・非表示にさせるか したいと思っております。 中途半端ですが下記の様なコードを書いておりましてその先 フォーム3での記述をどの様に書いたら良いのか行き詰って しまいました。 どなたかご親切な方、ご教示頂きたく宜しくお願い申し上げます。           記 クラス using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { public class Keikaku { public enum Mode { Syuuse, Syoukai } } } ---------------------------------- フォーム1 namespace WindowsFormsApplication1 { public partial class MainMenu : Form { private void button1_Click(object sender, EventArgs e) { Form2 cForm2 = new Form2(); cForm2.Syuusei = Keikaku.Mode.Syuusei; cForm2.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { Form2 cForm2 = new Form2(); cForm2.Syuusei = Keikaku.Mode.Syoukai; cForm2.ShowDialog(); } } } ---------------------------------- フォーム2 namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private Keikaku.Mode _kakunin; public Keikaku.Mode Syuusei { set { _kakunin = value; } } private void button1_Click_1(object sender, EventArgs e) { Form3 cForm3 = new Form3(); cForm3.ShowDialog(); } } } ---------------------------------- フォーム3 namespace WindowsFormsApplication1 { public partial class Form3 : Form { } }

専門家に質問してみよう