作成日: 2019/02/15 最終更新日: 2019/04/17
文書種別
不具合
状況
修正済み
詳細
フィルタリングの機能で、テキストフィルターの「指定の値に等しい」で条件指定した場合、指定した条件が正しく保存されず、NullReferenceException例外が発生する場合があります。
以下の手順で現象が発生します。
以下の手順で現象が発生します。
- フィルタのドロップダウンを開く
- 「テキストフィルター」から「指定の値に等しい」を開く
- ダイアログの1つめの条件のテキストボックスに「XXXX*」(テキスト + アスタリスク)と入力してOKボタンを押下
- 再度同じ列のフィルタのドロップダウンを開く
- 「テキストフィルター」から「ユーザー設定フィルター」を開く
- 条件を選択するコンボボックスで「と等しい」が選択されておらず、クリアされる(不正)
- OKボタンを押下
- NullReferenceExceptionの例外が発生(不正)
回避方法
Service Pack 3(v2.0.2019.0417)で修正済みです。
Service Pack 3(v2.0.2019.0417)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のコードにより、上記手順8.のときにOKボタンを無効(押下できない)状態にします。
◎サンプルコード(C#)
Service Pack 3(v2.0.2019.0417)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のコードにより、上記手順8.のときにOKボタンを無効(押下できない)状態にします。
◎サンプルコード(C#)
private void Window_Loaded(object sender, RoutedEventArgs e)
{
EventManager.RegisterClassHandler(typeof(CustomAutoFilterWindow),
Window.LoadedEvent, new RoutedEventHandler(CustomAutoFilterWindow_Loaded));
}
private void CustomAutoFilterWindow_Loaded(object sender, RoutedEventArgs e)
{
var filterWindow = sender as CustomAutoFilterWindow;
Button okBtn = null;
ComboBox filterCompareType1 = null;
ComboBox filterCompareType2 = null;
Action findControls = null;
findControls = obj =>
{
var childCount = VisualTreeHelper.GetChildrenCount(obj);
for (int i = 0; i < childCount; i++)
{
var current = VisualTreeHelper.GetChild(obj, i);
var btn = current as Button;
if (btn != null && btn.IsDefault)
{
okBtn = btn;
}
else
{
var cmb = current as ComboBox;
if (cmb != null && !cmb.IsEditable)
{
int gridRow = Grid.GetRow(cmb);
if (gridRow == 0)
{
filterCompareType1 = cmb;
}
else if (gridRow == 2)
{
filterCompareType2 = cmb;
}
}
else if (current is Panel)
{
findControls(current);
}
}
}
};
findControls(filterWindow.Content as DependencyObject);
if (okBtn == null)
{
return;
}
if (filterCompareType1 == null)
{
return;
}
if (filterCompareType2 == null)
{
return;
}
if (filterCompareType1.SelectedIndex == -1 || filterCompareType2.SelectedIndex == -1)
{
okBtn.IsEnabled = false;
}
_okBtn = okBtn;
_filterCompareType1 = filterCompareType1;
_filterCompareType2 = filterCompareType2;
filterCompareType1.SelectionChanged += FilterCompareType_SelectionChanged;
filterCompareType2.SelectionChanged += FilterCompareType_SelectionChanged;
}
private Button _okBtn;
private ComboBox _filterCompareType1 = null;
private ComboBox _filterCompareType2 = null;
private void FilterCompareType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
_okBtn.IsEnabled = _filterCompareType1.SelectedIndex != -1 && _filterCompareType2.SelectedIndex != -1;
}
旧文書番号
83643