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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
雷電

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

#1 投稿記事 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
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#2 投稿記事 by NoWest »

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

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

#3 投稿記事 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
ではないのでしょうか?
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#4 投稿記事 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に仕様をあわせただけなのでどちらを使っても結果は同じのはずです。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#5 投稿記事 by NoWest »

ふと、考えたのですが
もしかしてListBoxの文字列が変更されたのを検出したいのでしょうか?

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

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

#6 投稿記事 by 雷電 »

リストボックス内の文字列の選択が変更されたときです。
変更されたのを取得したいのではありません。
コンボボックスの場合でも、SelChangeイベントでできるので、
リストボックスでもできるか、とおもってやっているのですが・・・
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#7 投稿記事 by NoWest »

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

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

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

#8 投稿記事 by 雷電 »

できました。
NoWestさん、ありがとうございました。
返信する