System.Windows.Forms.ToolStripDropDownから継承することで機能する、ある種のユーザーコントロールポップアップを処理するクラスがあります。これは、私が現在持っていたポップアップタイプで機能しました。その詳細については、以下で説明します。
まず、ポップアップタイプのスタイルでユーザーコントロールを保持するために使用するクラスです。
public class PopupWindow : System.Windows.Forms.ToolStripDropDown
{
private System.Windows.Forms.Control _content;
private System.Windows.Forms.ToolStripControlHost _host;
public PopupWindow(System.Windows.Forms.Control content)
{
//Basic setup...
this.AutoSize = false;
this.DoubleBuffered = true;
this.ResizeRedraw = true;
this.BackColor = content.BackColor;
this._content = content;
this._host = new System.Windows.Forms.ToolStripControlHost(content);
//Positioning and Sizing
this.MinimumSize = content.MinimumSize;
this.MaximumSize = content.Size;
this.Size = content.Size;
content.Location = Point.Empty;
//Add the host to the list
this.Items.Add(this._host);
}
}
ここで見ることができるように、私は単にそれにコントロールを渡し、それが仕事をするようにしています。このように「onclick」ポップアップでこれを使用すると、正常に機能します。
public void Popup(object sender, MouseEventArgs e, other params)
{
DevicePopup popupDevice = new DevicePopup();
//do stuff to the control here before displaying
PopupWindow popup = new PopupWindow(popupDevice);
popup.Show(Cursor.Position);
}
そしてそれをそのように呼びます。
this.Controls[btnAdd.Name].MouseClick += (sender, e) =>
{
int index = temp;
generatePopup.Popup(sender, e, mDevices[index], this);
};
これを正常に行うと、意図したとおり、マウスクリックでポップアップユーザーコントロールが作成されます。
ただし、現在、何かが発生したときに生成される2番目のタイプのポップアップを使用しようとしています。以下は私の新しいポップアップクラスであり、それを呼び出しています。
public void AlarmNotificationPopup(IDeviceInterface device)
{
try
{
AlarmNotification ANotification = new AlarmNotification();
//do stuff to the control again before displaying
PopupWindow popup = new PopupWindow(ANotification);
popup.Show(100, 100);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
AlarmNotificationPopup(device);
ただし、このポップアップは適切にレンダリング/作成されず、そのように見えます。
これを修正する方法が完全にはわかりません。誰かアイデアはありますか?