2009-12-18 3 views
1

Интересно, есть ли возможность (визуально и функционально) связать два элемента управления (компоненты)? (.NET2)Ссылка на два элемента управления в одном

Упрощение вещей, у меня есть две метки - одна из них является основной меткой (ее можно удалить с помощью мыши), а другая - ярлыком описания - ей необходимо следовать основной метке на указанное расстояние.

Кроме того, описание этикетка должна быть в состоянии реагировать на события, как мыши и т.д. Может быть, есть возможность использовать UserControl но между этикетками мне нужно быть «прозрачным» пространство.

Спасибо.

== EDIT 1 ==

Я мог бы также, вместо создания второй контрольной метки, просто использовать вечную TOOLTIP. В этом случае я задаюсь вопросом о возможности отображения его в Бесконечное время, а также возможность обнаружения щелчка по всплывающей подсказке.

Во всяком случае, если я нажимаю на этикетке или подсказке, мне нужно будет показывать пользователь контроля (вместо подсказки или меток) TextBox для того, чтобы она была в состоянии Изменения отображаемого описания (в факт, отображение времени)

== EDIT 2 ==

alt text http://lh4.ggpht.com/_1TPOP7DzY1E/Sy9Mk8-Z-xI/AAAAAAAACzo/-5huzSd59j4/s800/UserControl.png

это мой "прозрачный" дизайн UserControl

alt text 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). Точка представляет объект во временной позиции - на связанной метке мне нужно указать время точки. Пользователь сможет изменить время точки, щелкнув метку времени.

+0

Ответ на изменение 2: Вы устанавливаете непрозрачность на ноль? –

+0

@Josh: Да ... это по умолчанию 0. Я установил его также на 5, но это не изменилось, но оттенок фона. – serhio

ответ

2

Создать User Control. Обходной путь для проблемы прозрачности обозначен here.

+1

ok, я подтвердил слово * UserControl * в моем сообщении ** жирным **. – serhio

+0

Итак, создайте того, мудрый парень. Это именно то, что вам нужно. –

+1

Затем вам следует рассмотреть проблему, лежащую в основе. **Жирным шрифтом**. http://social.msdn.microsoft.com/forums/en-US/winforms/thread/a9c78c36-0569-4339-a499-b8411c5bbffb/ –

Смежные вопросы