エディトボックスの内容の変更の通知について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
THEREMIN
記事: 36
登録日時: 2007年2月11日(日) 01:52
お住まい: HYOGO pref.

エディトボックスの内容の変更の通知について

#1 投稿記事 by THEREMIN »

エディトボックスの内容を変更したときに処理されるように、
MainWnd_InputEditBox_Change()という関数で処理しています。
で、MainWnd_Create()内で
InputEditBoxの値を初期化するためにSetDlgItemText()を呼んでいるのですが、どうやら2度呼ばれているようです。
つまり、InputEditBoxが作成された際にWM_SETTEXTが呼ばれている為だと思うのですが、
これをやめさせる良い方法はありますか?

消極的な方法ですと、フラグ変数を使って一回目は無視するという方法もありますが、
それだとエディトボックスの数分必要になりますし…
trio

#2 投稿記事 by trio »

ためしに以下のコードを実行して見ましたが
一度しかメッセージボックスは表示されませんでしたので
ウィンドウメッセージの問題ではなくコード側の問題かと思われます

コード: 全て選択


Sub MainWnd_EditBox1_Change()
	MsgBox 0,"",,,
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	SetDlgItemText(hMainWnd,EditBox1,"")
End Sub
THEREMIN
記事: 36
登録日時: 2007年2月11日(日) 01:52
お住まい: HYOGO pref.

原因が分かりました

#3 投稿記事 by THEREMIN »

アップダウンコントロールにエディトボックスを関連づけているのですが、
その時に「数値の自動表示」と「自動関連づけ」にしていると最初に呼ばれてしまうようです。
まあこれはしょうがないと言うことなんでしょうか…
THEREMIN
記事: 36
登録日時: 2007年2月11日(日) 01:52
お住まい: HYOGO pref.

とりあえず解決しました。

#4 投稿記事 by THEREMIN »

といっても2度も呼ばれるのは気持ち悪いし何が起こるか分からないので、
Callback.wbpを書き換えようと思いましたが、
RADを使うと書き換えられてしまうので、メインウィンドウで作ってしまうことにしました。

コード: 全て選択

Dim DefaultIndex=0 As Long	' 最初に読み込むファイル番号
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	' アップダウンコントロールを作成(0-100)
	CreateUpDownControl(1342177430,258,25,20,38,hMainWnd,"UpDown", _
		GetWindowLong(hMainWnd,GWL_HINSTANCE) As HINSTANCE, _
		GetDlgItem(hMainWnd, InputEditBox),0,100,0)
	' デフォルトの番号を設定
	SetDlgItemText(hMainWnd, InputEditBox, Str$(DefaultIndex))
End Sub
ここで、InputEditBoxに設定する値はDefaultIndexとなっていますが、
iniファイルがあればファイルから読み込んだ値が使われます。
返信する