理解できない問題があります。
POSアプリケーションで使用される物理キーボードを表すWPFウィンドウがあります。各物理ボタンは、WPFボタンで表されます。ユーザーは、割り当てられている機能を変更するためのコントロールを備えた別のウィンドウを開くボタンをクリックします。ユーザーがボタンにカーソルを合わせると、現在割り当てられている機能を示すツールチップが表示されます。
新しい設定を設定したら、ツールチップを更新する必要があります。新しいツールチップは正しく表示されますが、古いツールチップは削除されません。を使用するButton.ToolTip = null
と、ツールのヒントがすべて消えます。を使用するButton.ToolTip = String.Empty
と、空白も表示されます。ボタンに機能が割り当てられていない場合、ツールチップを表示したくありません。
表示するものがない場合、ツールチップを削除/非アクティブ化するにはどうすればよいですか?
loadToolTips()は、親ウィンドウのWindow_Activatedイベント中に発生します。
コード:
private void loadToolTips()
{
JPOSDB db = new JPOSDB();
SqlDataReader dr = default(SqlDataReader);
StringBuilder tt = new StringBuilder();
dr = db.getDR("SELECT KeyName, FunctionName, Parameter1, Parameter2 FROM KeyboardSettings JOIN KeyboardFunctions ON KeySetting = FunctionID WHERE KeyboardID = " + runTime.keyboardID);
while (dr.Read())
{
foreach (Control ctrl in grdButtons.Children)
{
if (ctrl.GetType() == typeof(Button))
{
Button button = new Button();
button = (Button)ctrl;
button.ToolTip = null; <--- Causes all tool tips to disappear
if (button.Name.ToString() == dr[0].ToString())
{
tt.Clear();
tt.Append("Function: " + dr[1].ToString());
if (dr[2].ToString().Length > 0)
{
tt.Append(Environment.NewLine);
tt.Append("Value: " + dr[2].ToString());
}
if (dr[3].ToString().Length > 0)
{
tt.Append(Environment.NewLine);
tt.Append("Name: " + dr[3].ToString());
}
button.ToolTip = tt.ToString();
}
}
}
}
dr.Close();
}