我在这里使用 Jesper Palm 发布的代码: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);
}
}
我已经将它翻译成 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
它与显示其信息的 PictureBox 配合使用效果很好。但是由于某种原因,我无法让 DataGridView 在弹出窗口中显示任何内容。
如果我将网格从弹出窗口中拉出,它会很好地显示所有信息。如果我在调试期间暂停,网格会显示其中包含所有数据。它只是不显示任何内容。
有没有人有什么想法?
最佳答案
我无法重现您的问题。你能提供更多的代码吗?我一直在 VS2010 RC (.NET 4) 和 VS2008 (.NET 3.5) 中进行测试,这段代码在两者中都有效:
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);
}
}
这是它的样子: alt text http://img534.imageshack.us/img534/1640/popupcontrolwithgrid.jpg
在设计器中,您应该设置 BindingSource 并将其指定为 DataGridView 的数据源。
关于c# - DataGridView 不在 ToolStripDropDown 中显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431270/