none
フォームを表示した際にまれにComboBoxのTextが空白になってしまう現象について RRS feed

  • 質問

  • 初めまして。

    開発中のクライアントアプリケーションについてタイトルの現象が発生して調査をしていますが

    解決の糸口が見えず、こちらで同様の現象に対する情報を得られないかと思い投稿いたします。

    何か情報をお持ちの方いらっしゃいましたらご教授願います。

    ※画像を含めたかったのですがアカウントの確認がされるまで制限がかかっているため掲載できませんでした。

    言語:C#

    フレームワーク:.NET Framework3.5

    出力の種類:Windows アプリケーション

    現象:Form表示時に配置されたComboBoxのTextが空白になる場合がある

    アプリケーション概要:

     * 波形グラフを描画するクライアントアプリケーション

     * ComboBoxは波形の表示色を変更するために配置されている

     * ComboBoxは3つ配置されており、波形3本と対応している

    現象詳細:

     * Formを開く度に空白になったりならなかったりする

     * 空白になるComboBoxの数は1つまたは2つ(3つとも空白という現象は発生していない)

     * 空白になるComboBoxはランダム。

     * プルダウンリストにはアイテムが正常に表示される

     * 現象発生時はプルダウンリストよりアイテムを選択しても空白のままだが、選択した色が波形に反映される

    コード(抜粋):

    		/// <summary>初期化処理
    		/// </summary>
    		private void InitGraph()
    		{
    			SetGraphParamter();
    		}
    

    /// <summary> /// 画面のコントロールに設定ファイルからの値を設定 /// </summary> private void SetGraphParamter() { var waveColorSettingList = this.ApplicationManager.AllMpvConfigLogic. GetScreenSetting().WaveColorSetting;

    var channelNo = 0; foreach (var waveChannel in _waveChannelList) { var channelInfo = _waveDisplaySetting.WaveChannelSelections[channelNo]; waveChannel.SetColorItem(waveColorSettingList, channelInfo.ColorIndex, ComboBoxSelectedIndexChanged); channelNo++; } }

    		/// <summary>色コンボボックス設定
    		/// </summary>
    		/// <param name="colorItemList"></param>
    		/// <param name="selectIndex"></param>
    		/// <param name="selectedIndexChangedEvent"></param>
    		public void SetColorItem(IList<WaveColorSettingDto> colorItemList, int selectIndex,
    			EventHandler selectedIndexChangedEvent)
    		{
    			_isWaveColorSetting = true;
    
    			var waveColorList = colorItemList.Select(p => p).ToArray();
    			// 色の設定
    
    			comboBoxColor.DisplayMember = "WaveColorName";
    			comboBoxColor.ValueMember = "WaveColor";
    
    			comboBoxColor.Items.Clear();
    			comboBoxColor.Items.AddRange(waveColorList);
    
    			// 色の状態を設定
    			var waveColorIndex = selectIndex;
    			if (waveColorIndex > this.comboBoxColor.Items.Count)
    			{
    				_log.WarnFormat("チャンネル{0}のColorIndexが範囲外です。[{1}]", selectIndex, waveColorIndex);
    				waveColorIndex = 0;
    			}
    			this.comboBoxColor.SelectedIndex = waveColorIndex;
    
    			//イベント設定
    			this.comboBoxColor.SelectedIndexChanged += selectedIndexChangedEvent;
    
    			_isWaveColorSetting = false;
    		}
    		/// <summary>
    		/// コンボボックスを変更したときの処理
    		/// </summary>
    		/// <param name="sender"></param>
    		/// <param name="e"></param>
    		private void ComboBoxSelectedIndexChanged(object sender, EventArgs e)
    		{
    			try
    			{
    				if (_waveViewLogic.GetWaveDataList() == null
    					|| _waveViewLogic.GetWaveDataList().Count == 0)
    				{
    					return;
    				}
    
    				DrawGraph();
    			}
    			catch (Exception ex)
    			{
    				FormException(new Exception(Properties.Resources.MSG_NO_WAVE_GRAPH, ex));
    			}
    		}
    	/// <summary>
    	/// 波形の色設定
    	/// </summary>
    	[XmlElement(true, "WaveColorSetting")]
    	public class WaveColorSettingDto
    	{
    		/// <summary>波形のチャンネルのコンボボックスに表示する色の名前</summary>
    		public String WaveColorName { get; set; }
    
    		/// <summary>波形の選択する色の名前</summary>
    		public Color WaveColor { get; set; }
    	}


    2017年9月25日 10:45

すべての返信

  • 提示されているコードが細切れで、実行可能な状態に再構築できなかったので、潜在的にバグっぽいところの指摘だけ

    以下の部分のif条件判定は>=じゃないかな。

    // 色の状態を設定
    var waveColorIndex = selectIndex;
    if (waveColorIndex > this.comboBoxColor.Items.Count)
    {
    	_log.WarnFormat("チャンネル{0}のColorIndexが範囲外です。[{1}]", selectIndex, waveColorIndex);
    	waveColorIndex = 0;
    }
    this.comboBoxColor.SelectedIndex = waveColorIndex;
    #より厳密にするならwaveColorIndexがマイナスになってた場合や、comboBoxColor.Items.Countが0の場合も考慮する必要ありますが

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年9月25日 12:02
  • gekka さんが指摘されているような問題を、Load イベントで引いているとかかな?
    Load イベントハンドラで発生した例外はその場で停止せず、例外ダイアログが表示されず、そのまま続行するということがあるので。
    2017年9月25日 13:11
    モデレータ
  • 回答ありがとうございます。

    ご指摘の箇所についてはバグかどうか調査してみます。

    またwaveColorIndexが仮にマイナスになっていると仮定するとComboBoxのテキストが未選択となり事象が発生するかもしれません。

    waveColorIndexの値をログに出力してテストしてみたいと思います。

    2017年9月26日 4:30
  • 回答ありがとうございます。

    Load イベントハンドラで例外が発生した場合を想定して調査してみます。
    2017年9月26日 4:42
  • kurisan_tcc さん、こんにちは
    フォーラム オペレーターの立花楓です。

    本件について、その後はいかがでしょうか。
    テストや調査の最中だと思われますが、何か進展がございましたらこちらのスレッドへご返信いただけますと幸いです。

    また、今後参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いいたします。
     
    よろしくお願いします。


    MSDN/TechNet Community Support 立花楓

    2017年10月10日 6:44
    モデレータ