ComboBoxにて

解決


さくら  2005-06-13 11:37:42  No: 122511  IP: [192.*.*.*]

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

編集 削除
ガッ  2005-06-13 11:49:39  No: 122512  IP: [192.*.*.*]

消えませんでしたよ?

方法
1  VB6を起動して、標準EXEを選択。
2  Form:Form1にComboBox:Combo1を貼り付ける。
3  Form1のコードにさくらさんのコードをコピペ。
4  実行。
5  Combo1の項目のどれかを選択する。
7  Combo1のテキストにABCDが表示される。  ←目的の動作だと思われ。
何か他の部分が影響しているのかもね。

編集 削除
さくら  2005-06-13 11:57:50  No: 122513  IP: [192.*.*.*]

ガッさん検証ありがとうございます。
私もまったく同じようにしているのですが消えてしまいます。
再現できないのではしょうがないですね(ーー;)

元のプログラムが消えてしまうので新しく再現できるように作ったので他の部分が影響していると言われましても・・・
VBの設定とかは関係無いですよね(@_@)

編集 削除
ガッ  2005-06-13 12:44:39  No: 122514  IP: [192.*.*.*]

うーむ…もしかしたらスタイルも関係あるのかもしれないので、
検証した完全なソースを公開(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

※日本語でダラダラ説明するより、この方が手っ取り早いと思ったので投稿してみました。

編集 削除
流浪人  2005-06-13 12:57:30  No: 122515  IP: [192.*.*.*]

消えていました。
まず、教えてもらいていのが何をしたいのかで
回答が変わってくるのですが・・・
ただ、”ABCD”とコンボボックスに表示したいのであれば

Private Sub Combo1_Click()
    Comb1.List(Combo1.ListIndex) = "ABCD"
    DoEvents
End Sub

と試してみて下さい。

編集 削除
しろうと  2005-06-13 13:07:23  No: 122516  IP: [192.*.*.*]

見当違いならごめんなさい。
単にこういう事では?
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

編集 削除
さくら  2005-06-13 13:15:04  No: 122517  IP: [192.*.*.*]

ガッさん設定内容は同じでした。(メモ帳にて)
流浪人さん表示は出来ましたがComboBoxのリストが変更されちゃいます。
何がしたいかと言うと
1、ComboBoxから選択→                      12の項目を選択
2、それに伴うデータを表示→                12のデータを表示
3、ComboBoxの表示をリスト名を加工して表示→項目名を加工して表示
です。

編集 削除
さくら  2005-06-13 13:17:48  No: 122518  IP: [192.*.*.*]

しろうとさんすいません。
ComboBoxを選んでからの処理なので・・・
伝わらない説明ですいません。

編集 削除
流浪人  2005-06-13 13:23:14  No: 122519  IP: [192.*.*.*]

1,2についてですがComboBoxの初期値(表示する項目)
はコントロールのプロパティで設定できます。
設定方法ですが、プロパティの『List』に表示したい項目を
入力して下さい。
3についてですが、ちょっと意味が解りません。

こんな回答でいいでしょうか?

編集 削除
ななし  2005-06-13 13:40:49  No: 122520  IP: [192.*.*.*]

http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs6fixes.asp


6.1.8.1. Service Pack 4 で修正された問題
Visual Basic 6.0 の Click イベントでは、コンボ ボックス (ComboBox) のテキストの設定ができませんでした。 

これじゃないかな?

編集 削除
さくら  2005-06-13 13:59:29  No: 122521  IP: [192.*.*.*]

流浪人さんすいません。
ComboBoxのリストと表示したい文字が違うと表示できない仕組みになっているのでうかね??

編集 削除
さくら  2005-06-13 14:02:36  No: 122522  IP: [192.*.*.*]

ななしさんすいません。
SP6があたっているので大丈夫なはずです。

編集 削除
流浪人  2005-06-13 14:11:36  No: 122523  IP: [192.*.*.*]

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

この状態でもう一度試した見てください。

編集 削除
流浪人  2005-06-13 14:14:48  No: 122524  IP: [192.*.*.*]

ちょっと説明不足だったのかもしれないので
補足しますと、

ComboBoxの表示する項目は固定でよいのであれば
敢えてプログラムで制御せずとも、ComboBoxをクリックすれば
左側にプロパティが表示されるので、プロパティのList項目に
表示した項目を直接入力するば、表示されると思います。

編集 削除
特攻隊長まるるう  2005-06-13 15:26:40  No: 122525  IP: [192.*.*.*]

サービスパック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のリストと表示したい文字が違うと表示できない仕組みになっているのでうかね??
本来、候補の中から選択するコントロールなので、マイクロソフト
がそんな事を言い出して、余計なおせっかい的修正をしてしまった
可能性もあるかもしれません(  _)_
…で、リストに表示したい文字を追加すれば正常に動作したんですか?
したのだったらそーゆー仕組みと考えないといけないかもね?
リストの最後に書き換え可能なフリーのアイテムを追加しておいて、
リストを検索してなかったらそのフリーのアイテムを書き換えて
選択させたりする方が処理としては良いと思います。

編集 削除
さくら  2005-06-13 15:33:12  No: 122526  IP: [192.*.*.*]

流浪人さんすいません。
ComboBoxはAddItemでリストを作成するのとListで作成するのでは違いが無いように思えますし(Clear状態から)、結果も同じでした。
表示する項目は日々変更になります。

編集 削除
さくら  2005-06-13 15:41:11  No: 122527  IP: [192.*.*.*]

まるるうさんすいません。
最終行に追加してもダメでした。
私的には・・
Private Sub Combo1_Click()
  Combo1.Text = "ABCD"
  DoEvents
End Sub←ここを抜けるときに消えるのでPGではなくVB自体の事かと・・・
使わない方向で修正したほうが良いのですかね?(+_+)

編集 削除
特攻隊長まるるう  2005-06-13 16:37:27  No: 122528  IP: [192.*.*.*]

>最終行に追加してもダメでした。
それって他の 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  2005-06-13 16:52:25  No: 122529  IP: [192.*.*.*]

以下で解決される様だと、SPがあたっていないかも?
http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp168%2F8%2F24%2Easp&LN=JA

編集 削除
さくら  2005-06-15 20:20:30  No: 122530  IP: [192.*.*.*]

みなさんすいませんでしたm(_・_)m
この間、Winをインストールし直してからパッチを当てていませんでした(@@)
以前はSP6を当てていたのでその頭でいました。
本当にありがとうございましたとすいませんでした。
後、まるるうさんの
>VBの問題の場合でもプログラムで回避できないか?
と言う考え方は今回のミスにより貴重な考え方を教えて頂きありがとうございました。

PS.特攻隊長まるるうさんが正式Nameですがまるるうさんと省略するのは失礼にあたるんですかねぇ(?。?)

編集 削除