Соедините два элемента управления в одном
Интересно, есть ли возможность (визуально и функционально) связать два элемента управления (компоненты)? (.NET2)
Упрощенно, у меня есть две метки - одна из них является основной меткой (ее можно сместить мышью), а другая - меткой описания - она должна следовать за основной меткой на указанном расстоянии.
Кроме того, метка описания должна быть в состоянии реагировать на события, такие как щелчок мыши и т. Д. Может быть, есть возможность использовать UserControl, но между метками мне нужно быть "прозрачным" пробелом.
Благодарю.
== РЕДАКТИРОВАТЬ 1 ==
Я мог бы также вместо создания второго элемента управления меткой просто использовать вечную подсказку. В этом случае меня интересует возможность отображения бесконечного времени и возможность обнаружения щелчка по всплывающей подсказке.
В любом случае, если я нажму на метку или всплывающую подсказку, мне нужно будет отобразить пользователю элемент управления TextBox (вместо подсказки или метки), чтобы он мог изменять отображаемое описание (фактически отображая время)
== РЕДАКТИРОВАТЬ 2 ==
http://lh4.ggpht.com/_1TPOP7DzY1E/Sy9Mk8-Z-xI/AAAAAAAACzo/-5huzSd59j4/s800/UserControl.png
это мой "прозрачный" дизайн UserControl
http://lh5.ggpht.com/_1TPOP7DzY1E/Sy9MlM31jUI/AAAAAAAACzs/xIJ0hcgOzwo/s800/UserControlForm.png
и это моя форма в режиме работы (пользовательский элемент управления "прозрачный" регион, охватывающий кнопку).
это код usercontrol:
using System;
using System.Windows.Forms;
using System.Drawing;
namespace WindowsControlLibrary1
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020;//WS_EX_TRANSPARENT
return cp;
}
}
private int opacity;
public int Opacity
{
get { return opacity; }
set
{
opacity = value;
this.InvalidateEx();
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
Color bk = Color.FromArgb(Opacity, this.BackColor);
e.Graphics.FillRectangle(new SolidBrush(bk), e.ClipRectangle);
}
protected void InvalidateEx()
{
if (Parent == null)
return;
Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = this.Location + (Size)e.Location;
}
}
Point cursorDownPoint = Point.Empty;
private void label1_MouseDown(object sender, MouseEventArgs e)
{
cursorDownPoint = label1.PointToScreen(e.Location);
}
}
}
=================
* Описание было немного упрощено. В моем реальном случае у меня есть пользовательский компонент круговой точки (: от Microsoft.VisualBasic.PowerPacks.OvalShape). Точка представляет объект во временной позиции - в связанной метке мне нужно указать время точки. Пользователь сможет изменить время точки, нажав на метку времени.
1 ответ
Создайте пользовательский элемент управления. Обходной путь для проблемы прозрачности обрисован в общих чертах здесь.