0

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);

ただし、このポップアップは適切にレンダリング/作成されず、そのように見えます。

レンダリングの問題

これを修正する方法が完全にはわかりません。誰かアイデアはありますか?

4

1 に答える 1

0

試してみるいくつかのこと:

「基本設定」は必要ないと思いますので、コメントアウトしてください。また、マージンとパディングを設定してみてください。

public PopupWindow(Control content) {
  // Basic setup...
  // this.AutoSize = false;
  // this.DoubleBuffered = true;
  // this.ResizeRedraw = true;
  // this.BackColor = content.BackColor;

  this._content = content;
  this._host = new ToolStripControlHost(content);
  this._host.Margin = new Padding(0);
  this._host.Padding = new Padding(0);
  this.Padding = new Padding(0);
  this.Margin = new Padding(0);

  //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);
}

プロパティが設定されAlarmNotificationていることを確認してください。MinimumSize

それが問題の解決に役立たない場合は、おそらくAlarmNotificationクラスが何をしているかを文書化する必要があります。

于 2012-06-15T13:33:09.620 に答える