WindowsXP、VC++ 2005 ExpressEditionを使用しています。
2台のパソコンをケーブルで繋いでチャットシステムを作ろうとしているのですが、
「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール '(コントロール名)' がアクセスされました。」
というエラーが出てしまいます。
ハイパーターミナルを使ってデータの送受信を確認した所、データの送信、受信共に出来ています。
問題はコントロールにアクセスできないところだと分かってはいるのですが、具体的にどのような書き方をしてデータを渡せばいいのか分かりません。
デリゲートではないかと見当をつけて、C#なら見つけたものの、それをどうVC++の書き方にすればいいか分からないので困っています。
また、デリゲートを使えばいいのかさえ手探り状態なので、どなたかご教授ください。
No.1ベストアンサー
- 回答日時:
.NETでは、メインスレッド以外がフォームやコントロールのプロパティを変更することを禁止しています。
>デリゲートではないかと見当をつけて
その見解であっているはずです。
参考サイトにC++でのソースがあります。
参考URL:http://msdn2.microsoft.com/ja-jp/library/a06c0dc …
ありがとうございます。
C++のソースを元に改造を加えてみた所、目的のコントロールに表示できるようになりました。
しかし動いたものの、疑問なところがあります。
void DelegateMethod( TextBox^ myControl, String^ myCaption )
{
myControl->Name = "Print_txt";
Print_txt->Text = myCaption;
}
この部分の表記で、新しく定義したmyControlというテキストボックスの名前を、表示したいコントロール名(元からフォームに配置してあったもの)に変えて、そこにmyCaptionの中身を表示するようにしたのですが、元からあった同名のテキストボックスとの関係はどうなっているのでしょう。
アクセスできるように名前を指定するのでしょうか?
参考サイトのソースは新しくコントロールを追加していたため、元からあるコントロールに表示したい場合にこの書き方でなぜ表示されるのか、納得できないので教えていただけると幸いです。
No.2
- 回答日時:
#1です。
いまいち「新しく定義したコントロール」「定義済みコントロール」をどう渡したのか、文面から読みづらいのですが。
貴方が何を理解していて、何を理解していないのか正直わかりません。以下、想像というかあてずっぽうで回答します。
ローカルとグローバルのスコープの違いだとか、引数はローカルだとか、その違いを理解されていますか?
DelegateMethodの引数「myControl」「myCaption」はローカルの宣言なので、存在しない全然別の名前「ctrl」「cap」に変えても動作は変わりません。
#変わったら何か別の間違いをしている。
あと、myControlという名前がすでに別のところで使われていても、直近で宣言したローカル変数に同名の名前があればそちらが優先されます。
それで混乱しているのでは?
>あと、myControlという名前がすでに別のところで使われていても、直近で宣言したローカル変数に同名の名前があればそちらが優先されます。
聞きたかったことはこれです。
つたない文章に回答していただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- セキュリティホール・脆弱性 論理的アクセス・コントロールに関する問題で悩んでいます 1 2022/10/08 08:42
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- 写真・ビデオ スマホアプリ 写真データへのアクセスについて 情報漏洩 2 2023/06/22 23:00
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- Gmail gmailについて gmailで届いた順にメールが一通一通表示されているのを何とかしたいです。 今使 2 2022/08/12 22:18
- ドライブ・ストレージ 家庭用のNASについて 2 2022/07/05 18:30
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
もしフォームヘッダーにコント...
-
ExcelVBAでListViewが使用できない
-
ユーザーフォームで動的(Me.Con...
-
アクセス特有の書き方?
-
OCXって何ですか?
-
変数をコントロール型で使用す...
-
Excel VBA 動的に作成したチェ...
-
カメラスクロールするのを動画...
-
EXCELでactivexコントロールを...
-
コントロールを移動できない
-
間違えて配置してしまったコン...
-
真面目さをコントロールして無...
-
Shapeコントロールの.NET移行方法
-
DataGridView、1セルに複数コ...
-
Groupboxの配下のコントロール...
-
エクセル IEをコピーし貼り付け...
-
LCD 1602ディスプレイの輝度調...
-
コンボボックスの文字によるif...
-
C#で自分のウインド・ハンド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報