Win2000
VB6
以下のプログラムを実行するとComboBoxのTextが消えてしまうのはなぜですか?
消えないようには出来ないのですか?
Option Explicit
Private Sub Combo1_Click()
Combo1.Text = "ABCD"
DoEvents '←ステップ実行にてここまでは表示されます
End Sub '←イベントを抜けるのと同時に消えてしまいます
Private Sub Form_Load()
Dim i As Integer
Combo1.Text = ""
For i = 0 To 9
Combo1.AddItem Str(i)
Next
End Sub
消えませんでしたよ?
方法
1 VB6を起動して、標準EXEを選択。
2 Form:Form1にComboBox:Combo1を貼り付ける。
3 Form1のコードにさくらさんのコードをコピペ。
4 実行。
5 Combo1の項目のどれかを選択する。
7 Combo1のテキストにABCDが表示される。 ←目的の動作だと思われ。
何か他の部分が影響しているのかもね。
ガッさん検証ありがとうございます。
私もまったく同じようにしているのですが消えてしまいます。
再現できないのではしょうがないですね(ーー;)
元のプログラムが消えてしまうので新しく再現できるように作ったので他の部分が影響していると言われましても・・・
VBの設定とかは関係無いですよね(@_@)
うーむ…もしかしたらスタイルも関係あるのかもしれないので、
検証した完全なソースを公開(orz
--Form1.frmとして保存--
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows の既定値
Begin VB.ComboBox Combo1
Height = 300
Left = 0
TabIndex = 0
Text = "Combo1"
Top = 120
Width = 1575
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Sub Combo1_Click()
Combo1.Text = "ABCD"
DoEvents '←ステップ実行にてここまでは表示されます
End Sub '←イベントを抜けるのと同時に消えてしまいます
Private Sub Form_Load()
Dim i As Integer
Combo1.Text = ""
For i = 0 To 9
Combo1.AddItem Str(i)
Next
End Sub
※日本語でダラダラ説明するより、この方が手っ取り早いと思ったので投稿してみました。
消えていました。
まず、教えてもらいていのが何をしたいのかで
回答が変わってくるのですが・・・
ただ、”ABCD”とコンボボックスに表示したいのであれば
Private Sub Combo1_Click()
Comb1.List(Combo1.ListIndex) = "ABCD"
DoEvents
End Sub
と試してみて下さい。
見当違いならごめんなさい。
単にこういう事では?
Private Sub Combo1_Click()
'処理
DoEvents
End Sub
Private Sub Form_Load()
Dim i As Integer
Combo1.Text = ""
For i = 0 To 9
Combo1.AddItem Str(i)
Next
Combo1.Text = "ABCD"
End Sub
ガッさん設定内容は同じでした。(メモ帳にて)
流浪人さん表示は出来ましたがComboBoxのリストが変更されちゃいます。
何がしたいかと言うと
1、ComboBoxから選択→ 12の項目を選択
2、それに伴うデータを表示→ 12のデータを表示
3、ComboBoxの表示をリスト名を加工して表示→項目名を加工して表示
です。
しろうとさんすいません。
ComboBoxを選んでからの処理なので・・・
伝わらない説明ですいません。
1,2についてですがComboBoxの初期値(表示する項目)
はコントロールのプロパティで設定できます。
設定方法ですが、プロパティの『List』に表示したい項目を
入力して下さい。
3についてですが、ちょっと意味が解りません。
こんな回答でいいでしょうか?
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs6fixes.asp
の
6.1.8.1. Service Pack 4 で修正された問題
Visual Basic 6.0 の Click イベントでは、コンボ ボックス (ComboBox) のテキストの設定ができませんでした。
これじゃないかな?
流浪人さんすいません。
ComboBoxのリストと表示したい文字が違うと表示できない仕組みになっているのでうかね??
ななしさんすいません。
SP6があたっているので大丈夫なはずです。
ComboBoxのリストは先ほどお伝えした通りListプロパティで設定で
設定できませんでしたか?
Private Sub Combo1_Click()
' Combo1.Text = "ABCD"
DoEvents '←ステップ実行にてここまでは表示されます
End Sub '←イベントを抜けるのと同時に消えてしまいます
Private Sub Form_Load()
Dim i As Integer
Combo1.Text = ""
' For i = 0 To 9
' Combo1.AddItem Str(i)
' Next
End Sub
この状態でもう一度試した見てください。
ちょっと説明不足だったのかもしれないので
補足しますと、
ComboBoxの表示する項目は固定でよいのであれば
敢えてプログラムで制御せずとも、ComboBoxをクリックすれば
左側にプロパティが表示されるので、プロパティのList項目に
表示した項目を直接入力するば、表示されると思います。
サービスパック6…不具合もあったし、あてて良かったという
話をまだあまり聞いてないので5の状態で使ってますが…。
Win2000(SP4)VB6.0(SP5)のうちの環境では再現しませんでした。
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/faq_vs6sp6.asp
SP6 で何が修正されたのか…詳しい説明を見つけてないので
以下、かなり憶測を含む書き込みですのでご注意を。
…で、流浪人さんも6あててるの?…で再現したの?
その辺のハッキリした情報が欲しぃ…。
>Private Sub Form_Load()
> Dim i As Integer
>
> Combo1.Text = ""
>' For i = 0 To 9
>' Combo1.AddItem Str(i)
>' Next
>End Sub
>
>この状態でもう一度試した見てください。
それだとクリックイベントを起こせないかも(^^;)
>ComboBoxのリストと表示したい文字が違うと表示できない仕組みになっているのでうかね??
本来、候補の中から選択するコントロールなので、マイクロソフト
がそんな事を言い出して、余計なおせっかい的修正をしてしまった
可能性もあるかもしれません( _)_
…で、リストに表示したい文字を追加すれば正常に動作したんですか?
したのだったらそーゆー仕組みと考えないといけないかもね?
リストの最後に書き換え可能なフリーのアイテムを追加しておいて、
リストを検索してなかったらそのフリーのアイテムを書き換えて
選択させたりする方が処理としては良いと思います。
流浪人さんすいません。
ComboBoxはAddItemでリストを作成するのとListで作成するのでは違いが無いように思えますし(Clear状態から)、結果も同じでした。
表示する項目は日々変更になります。
まるるうさんすいません。
最終行に追加してもダメでした。
私的には・・
Private Sub Combo1_Click()
Combo1.Text = "ABCD"
DoEvents
End Sub←ここを抜けるときに消えるのでPGではなくVB自体の事かと・・・
使わない方向で修正したほうが良いのですかね?(+_+)
>最終行に追加してもダメでした。
それって他の Item を手動で選んでもできないって事になってしまう気も
しますが…(汗)
>End Sub←ここを抜けるときに消えるのでPGではなくVB自体の事かと・・・
うん。だからVBの問題の場合でもプログラムで回避できないか?って事も
視野に入れて回答してます。…ただ、原因が分からないと実験しつつの対処
療法になってしまいます。できればそれは避けたいの。流浪人さんが、
>消えていました。
とレスしてるので、どうにか再現できないか?原因に迫れないか?情報が
欲しいのね。こちらでは再現してませんので、結果をできるだけ正確に
報告して欲しいです。
>使わない方向で修正したほうが良いのですかね?(+_+)
では別のプロパティを設定する方向でテスト
[VB6.0]
Option Explicit
Private Sub Combo1_Click()
Call ComboSearch(Me.Combo1, "ABCD")
DoEvents
End Sub
Private Sub ComboSearch(ByRef ComboX As ComboBox, ByVal SearchString)
Dim i As Integer
With ComboX
For i = 0 To .ListCount - 1
If .List(i) = SearchString Then
.ListIndex = i
Exit For
End If
Next
If i = .ListCount Then
.AddItem SearchString
.ListIndex = .ListCount - 1
End If
End With
End Sub
Private Sub Form_Load()
Dim i As Integer
Combo1.Text = ""
For i = 0 To 9
Combo1.AddItem Str(i)
Next
End Sub
以下で解決される様だと、SPがあたっていないかも?
http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp168%2F8%2F24%2Easp&LN=JA
みなさんすいませんでしたm(_・_)m
この間、Winをインストールし直してからパッチを当てていませんでした(@@)
以前はSP6を当てていたのでその頭でいました。
本当にありがとうございましたとすいませんでした。
後、まるるうさんの
>VBの問題の場合でもプログラムで回避できないか?
と言う考え方は今回のミスにより貴重な考え方を教えて頂きありがとうございました。
PS.特攻隊長まるるうさんが正式Nameですがまるるうさんと省略するのは失礼にあたるんですかねぇ(?。?)