基本的にフォルダーであるデータベース オブジェクトを含む TreeView があります。ツリー内の「フォルダー」をクリックして、その「フォルダー」に関するデータを一連のコントロールに入力できるようにしたいと考えています。これはすべて私が書いたコードで問題なく動作しますが、問題は、キーボードの矢印キーを使用してフォルダー リストを上下に移動すると、最終的にアプリケーションがハングすることです。私の推測では、コントロールを設定するために使用しているバックグラウンド ワーカーがハングアップしているということです。
検索しましたが、私の問題に似たものは見つかりません。
これが私のツリービューafterselectコードです。
private void dmTree_AfterSelect(object sender, TreeViewEventArgs e)
{
object[] tagParts = e.Node.Tag as object[];
SelectedFolderNumber = tagParts[1].ToString();
if (!String.IsNullOrEmpty(SelectedFolderNumber) && SelectedFolderNumber != "0")
{
//update mini profile
if (bgwMiniProfile.IsBusy)
{
bgwMiniProfile.CancelAsync();
}
while (bgwMiniProfile.CancellationPending)
{
Application.DoEvents();
}
bgwMiniProfile.RunWorkerAsync();
while (bgwMiniProfile.IsBusy)
{
Application.DoEvents();
}
securityPanel.DisplayTrusteeList(folderTrustees);
}
}
securityPanel は、フォーム上のユーザー コントロールです。ここに DisplayTrusteeList コードがあります
public void DisplayTrusteeList(List<DocumentTrustee> documentTrustees)
{
try
{
dgvTrustees.Rows.Clear();
foreach (DocumentTrustee dt in documentTrustees)
{
dgvTrustees.Rows.Add(imagePG.Images[(int)dt.TrusteeType], dt.GetFullName(dmLogin), dt.AccessRights);
}
foreach (DataGridViewRow myRow in dgvTrustees.Rows)
{
ValidateRights(int.Parse(myRow.Cells["dmRights"].Value.ToString()), myRow);
}
dgvTrustees.ClearSelection();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "DisplayTrusteeList");
}
}
バックグラウンド ワーカーは次のとおりです。
private void bgwMiniProfile_DoWork(object sender, DoWorkEventArgs e)
{
if (!bgwMiniProfile.CancellationPending)
{
SetText(txtDocNumber, SelectedFolderNumber);
SetText(txtDocName, Utility.GetProfileValue(adminLogin, SelectedFolderNumber, "DOCNAME"));
SetText(txtClientId, Utility.GetProfileValue(adminLogin, SelectedFolderNumber, "CLIENT_ID"));
SetText(txtClientName, Utility.SetDescription(adminLogin, "CLIENT", txtClientId.Text));
SetText(txtMatterId, Utility.GetProfileValue(adminLogin, SelectedFolderNumber, "MATTER_ID"));
SetText(txtMatterName, Utility.SetDescription(adminLogin, "CLIENT", txtClientId.Text, txtMatterId.Text));
folderTrustees = Utility.GetFolderTrustees(adminLogin, SelectedFolderNumber);
}
else
{
e.Cancel = true;
}
}
矢印キーを使用してツリー ノードをカーソルで移動し、ユーザーがノードに着陸して数秒間そこにとどまるまで、選択後のコードが起動しないようにしたいと考えています。それは可能ですか?
ありがとう、これが私の最初の質問です。フォーマットが良くない場合は申し訳ありません。ここから多くのソリューションを使用しました。