Bu uçuşu C # Win Kontrolü nasıl oluşturulur

oy
8

Nasıl onun bölgenin dışına çıkarsa bir C # Win kontrolünü oluşturabilir? Böyle kutuyu açarak olarak. Tıpkı eğer böyle bir Küçük Ölçekli Paneli'nde bir DropDownBox vardı.

Oluştur 09/12/2008 saat 18:21
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
8

Windows Forms iyi böyle pencereleri desteklemez, bu tasarımcı ile oldukça temelden uyumsuz. İşte başlamanız için bazı kod. Bunu çalışma anında oluşturulması gerekir, tasarımcı bu denetimi kullanamazsınız. Ayrıca kendi Dispose () yöntemini kendine çağırmalıdır.

using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;

public class MyListBox : ListBox {
  private Control mParent;
  private Point mPos;
  private bool mInitialized;

  public MyListBox(Control parent) {
    mParent = parent;
    mInitialized = true;
    this.SetTopLevel(true);
    parent.LocationChanged += new EventHandler(parent_LocationChanged);
    mPos = mParent.Location;
  }

  public new Point Location {
    get { return mParent.PointToClient(this.Location); }
    set { 
      Point zero = mParent.PointToScreen(Point.Empty);
      base.Location = new Point(zero.X + value.X, zero.Y + value.Y);
    }
  }

  protected override Size DefaultSize {
    get {
      return mInitialized ? base.DefaultSize : Size.Empty;
    }
  }

  protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) {
    if (this.mInitialized)
      base.SetBoundsCore(x, y, width, height, specified);
  }

  void parent_LocationChanged(object sender, EventArgs e) {
    base.Location = new Point(base.Left + mParent.Left - mPos.X, base.Top + mParent.Top - mPos.Y);
    mPos = mParent.Location;
  }

  protected override CreateParams CreateParams {
    get {
      CreateParams cp = base.CreateParams;
      if (mParent != null && !DesignMode) {
        cp.Style = (int)(((long)cp.Style & 0xffff) | 0x90200000);
        cp.Parent = mParent.Handle;
        Point pos = mParent.PointToScreen(Point.Empty);
        cp.X = pos.X;
        cp.Y = pos.Y;
        cp.Width = base.DefaultSize.Width;
        cp.Height = base.DefaultSize.Height;
      }
      return cp;
    }
  }
}
Cevap 09/12/2008 saat 22:41
kaynak kullanıcı

oy
2

Geçenlerde buna benzer bir şey yaptım ve bir liste kutusu kullanılır. Serin bir liste kutusu hakkında, hatta kontrol aut, her yerde istediğiniz gösterebildiğini onaylamak olduğunu düşünüyorum. Eğer istediğiniz DropDown göstermesi gerektiğini, bir düğme tıklama ya da her neyse yoluyla algılamak Bu yolla, sadece ListBox doldurmak ve her yerde istediğiniz görüntüler. Ben buradan fikrim var:

http://msdn.microsoft.com/en-us/library/aa480727.aspx

Onlar filtreleme Özel Bir DataGridView inşa etmek ve filtre değerleri görüntülemek için, bunlar başlık hücresinin altındaki bir ListBox yerleştirmek göstermek.

Cevap 09/12/2008 saat 20:08
kaynak kullanıcı

oy
0

burada iyi bir makale var:

http://www.vbaccelerator.com/home/NET/Code/Controls/Popup_Windows/Popup_Windows/article.asp

Bu, bu almanın zor yönlerinden bazıları böyle, aktif uygulama penceresi başlık çubuğu tutarak Alt-Tab taşıma ve bir fare tıklaması ile iptal olarak, düzgün çalışması için işleyen bir sınıf yok.

Cevap 06/07/2012 saat 02:47
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more