ページ 11

リストボックスの指定している文字列の取得

Posted: 2006年7月05日(水) 21:39
by 雷電
現在、リストボックスの内容を変更したときに、同じウィンドウにあるエディットボックス(ここでは2です)に説明書きをしたいと思ってコーディングしています。
しかし、リストボックスの内容が変化しても、GetWindowText関数がちゃんと働かず、デバッグ命令で変数(ここではData)の中身を見てみると、何も入っていない・・・
という事態になっています。
コードを載せておきますので、間違っている点ありましたら、書込みお願いします。
それと、これには、GetDlgItemTextStrという関数を使っていますが、これはイグトランスさんが作られた関数を利用しています。前に書いてあるものと思ってください。
ウィンドウにはエディットボックスが2個と、リストボックスが1個、コンボボックスが2個設置してあります。

コード: 全て選択

Sub MainWnd_ListBox1_SelChange()
	Dim Data As String
	GetDlgItemTextStr(hMainWnd,ListBox1,Data)
	SetDlgItemText(hMainWnd,EditBox2,Data)
End Sub

Posted: 2006年7月06日(木) 06:07
by NoWest
> 現在、リストボックスの内容を変更したときに、同じウィンドウにあるエディットボックス(ここでは2です)に説明書きをしたいと思ってコーディングしています。
> しかし、リストボックスの内容が変化しても、GetWindowText関数がちゃんと働かず、デバッグ命令で変数(ここではData)の中身を見てみると、何も入っていない・・・
> という事態になっています。
> コードを載せておきますので、間違っている点ありましたら、書込みお願いします。
> それと、これには、GetDlgItemTextStrという関数を使っていますが、これはイグトランスさんが作られた関数を利用しています。前に書いてあるものと思ってください。
> ウィンドウにはエディットボックスが2個と、リストボックスが1個、コンボボックスが2個設置してあります。
全体的な流れは間違っていませんがリストボックスから文字列を取得する場合、GetDlgItemTextStrは使えません。

同じようにString型を使用する関数ですがリストボックス用のものを用意しましたので使ってください。

Posted: 2006年7月06日(木) 20:08
by 雷電
返信ありがとうございます。
早速使わせてもらいました。
やはりできません。
間違っているのかと思ってそのままコピペして使ってみましたが使えませんでした。
それと、コードはこうではないのでしょうか?

コード: 全て選択

Sub MainWnd_ListBox1_SelChange() 
    Dim pos As Long 
    pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0) 
    Dim Data As String 
    GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data) 
    SetWindowText(GetDlgItem(hMainWnd,EditBox2),Data) 
End Sub
ではなく、

コード: 全て選択

Sub MainWnd_ListBox1_SelChange() 
    Dim pos As Long 
    pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0) 
    Dim Data As String 
    GetDlgLisBoxStr(hMainWnd,ListBox1,pos,Data) 
    SetWindowText(GetDlgItem(hMainWnd,EditBox2),Data) 
End Sub
ではないのでしょうか?

Posted: 2006年7月06日(木) 22:06
by NoWest
> 返信ありがとうございます。
> 早速使わせてもらいました。
> やはりできません。
変ですね。
こちらでは動いていますよ。
こちらでももう少し調べてみることにしますが、情報が不足していますのでもう少しプログラムの前後を見てみないと分かりません。
> それと、コードはこうではないのでしょうか?
>

コード: 全て選択

Sub MainWnd_ListBox1_SelChange() 
>     Dim pos As Long 
>     pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0) 
>     Dim Data As String 
>     GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data) 
>     SetWindowText(GetDlgItem(hMainWnd,EditBox2),Data) 
> End Sub
>
> ではなく、
>
>

コード: 全て選択

Sub MainWnd_ListBox1_SelChange() 
>     Dim pos As Long 
>     pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0) 
>     Dim Data As String 
>     GetDlgLisBoxStr(hMainWnd,ListBox1,pos,Data) 
>     SetWindowText(GetDlgItem(hMainWnd,EditBox2),Data) 
> End Sub
>
> ではないのでしょうか?
単にGetDlgItemTextStrとGetWindowTextStrに仕様をあわせただけなのでどちらを使っても結果は同じのはずです。

Posted: 2006年7月06日(木) 22:16
by NoWest
ふと、考えたのですが
もしかしてListBoxの文字列が変更されたのを検出したいのでしょうか?

だとするとSelChangeイベントではうまくできません。

実装方法をこれから考えて見ますか。。。

Posted: 2006年7月08日(土) 12:47
by 雷電
リストボックス内の文字列の選択が変更されたときです。
変更されたのを取得したいのではありません。
コンボボックスの場合でも、SelChangeイベントでできるので、
リストボックスでもできるか、とおもってやっているのですが・・・

Posted: 2006年7月08日(土) 22:07
by NoWest
> リストボックス内の文字列の選択が変更されたときです。
> 変更されたのを取得したいのではありません。
> コンボボックスの場合でも、SelChangeイベントでできるので、
> リストボックスでもできるか、とおもってやっているのですが・・・
こちらではうまくいっていますのでこれ以上は何ともし難いでしね。

ちゃんと取得したいリストボックスのIDを指定しているか、エディットボックスのIDの指定はできていますか?

もしくはリストボックスのスタイルに「通知」が付いているか確認してみてください。

Posted: 2006年7月09日(日) 11:34
by 雷電
できました。
NoWestさん、ありがとうございました。