I'm utilizing the code posted by Jesper Palm here: Make user control display outside of form boundry
/// <summary>
/// A simple popup window that can host any System.Windows.Forms.Control
/// </summary>
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._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);
}
}
I've translated it to VB:
Public Class PopupWindow
Inherits System.Windows.Forms.ToolStripDropDown
Private _content As System.Windows.Forms.Control
Private _host As System.Windows.Forms.ToolStripControlHost
Public Sub New(ByVal content As System.Windows.Forms.Control)
Me.AutoSize = False
Me.DoubleBuffered = True
Me.ResizeRedraw = True
Me._content = content
Me._host = New System.Windows.Forms.ToolStripControlHost(content)
Me.MinimumSize = content.MinimumSize
Me.MaximumSize = content.MaximumSize
Me.Size = content.Size
content.Location = Point.Empty
Me.Items.Add(Me._host)
End Sub
End Class
It works great with a PictureBox showing its information. But for some reason I cannot get the DataGridView to display anything when it is in the popup.
If I pull the grid out of the popup it displays all of its information fine. If I pause during debug, the grid shows that it has all the data in it. It's just not displaying anything.
Does anybody have any ideas?
I have not been able to reproduce your problem. Can you provide more code? I've been testing in VS2010 RC (.NET 4) and VS2008 (.NET 3.5) and this code works in both:
public partial class Form1 : Form
{
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhoneNumber { get; set; }
}
List<Person> _People;
public Form1()
{
InitializeComponent();
_People = new List<Person>();
_People.Add(new Person() { FirstName = "John", LastName = "Smith", PhoneNumber = "123-456-7890" });
_People.Add(new Person() { FirstName = "Jane", LastName = "Doe", PhoneNumber = "098-765-4321" });
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile("barcode.png");
pictureBox1.Location = new Point(-1000, -1000);
dataGridView1.DataSource = _People;
dataGridView1.Location = new Point(-1000, -1000);
}
private void button1_Click(object sender, EventArgs e)
{
PopupControl popup = new PopupControl(pictureBox1);
popup.Show(new Point(this.Location.X - 128, this.Location.Y));
}
private void button2_Click(object sender, EventArgs e)
{
PopupControl popup = new PopupControl(dataGridView1);
popup.Show(new Point(this.Location.X - 128, this.Location.Y));
//optionally change the items in the data source
_People.Add(new Person() { FirstName = "NewFirst", LastName = "NewLast", PhoneNumber = "123-333-3322" });
//reset the bindings
bindingSource1.DataSource = _People;
bindingSource1.ResetBindings(true);
}
}
Here's what it looks like: alt text http://img534.imageshack.us/img534/1640/popupcontrolwithgrid.jpg
In the designer, you should setup the BindingSource and assign it as the DataGridView's DataSource.
It's probably a drawing issue. Maybe you could try a .Refresh on either the popupcontainer or the grid after it's been shown?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.