如何MonthCalendar在頂部顯示類似于DateTimePicker下拉選單?我有一個自定義控制元件(TextBox和),單擊時會動態Button顯示。MonthCalendar
我可以通過面板將它放在控制元件前面,但不能在面板上方。下圖;
private void btn_Click(object sender, EventArgs e)
{
if (mc.Parent == null)
{
this.Parent.Controls.Add(mc);
mc.Location = new Point(this.Location.X, this.Location.Y this.Height);
mc.BringToFront();
}
else
{
mc.Show();
}
}

uj5u.com熱心網友回復:
a 上的下拉日歷DateTimePicker是一個浮動視窗,a 上的下拉串列也是如此ComboBox。只是一個常規控制元件,MonthCalendar因此,就像任何其他控制元件一樣,它不能顯示在其父級范圍之外。如果您希望它顯示在表單上并且超出 a 的范圍,Panel那么您需要將其父級設為表單,而不是Panel. 如果您希望它也顯示在表單的邊界之外,那么您需要創建一個新的無邊框表單并將其設為控制元件的父級。
這是一種可用于將子控制元件從一個父控制元件移動到另一個父控制元件而不更改其在螢屏上的絕對位置的方法:
/// <summary>
/// Moves a child control from its current parent to a new parent while maintaining the same absolute location.
/// </summary>
/// <param name="child">
/// The child control to move.
/// </param>
/// <param name="newParent">
/// The new parent to move the child control to.
/// </param>
private void ChangeParent(Control child, Control newParent)
{
var screenLocation = child.PointToScreen(Point.Empty);
child.Parent = null;
child.Location = newParent.PointToClient(screenLocation);
child.Parent = newParent;
}
在您的情況下,您可能希望這樣稱呼它:
ChangeParent(mc, this);
之后您可能需要呼叫BringToFront子控制元件,具體取決于您的 z 順序。
請注意,您也可以MonthCalendar在設計器中將其添加到表單中,然后Location在屬性視窗中更改它以將其放置在正確的位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522133.html
標籤:C#表格月历
