1

我想知道是否有可能(在视觉上和功能上)链接两个控件(组件)?(.NET2)

简化事情,我有两个标签 - 其中一个是主标签(它可以用鼠标代替),另一个 - 描述标签 - 它需要在指定距离上跟随主标签。

此外,描述标签应该能够响应事件,例如鼠标单击等。也许有可能使用UserControl但在标签之间我需要一个“透明”空间。

谢谢。

==编辑 1==

我也可以,而不是创建第二个标签控件,只使用一个永恒的 toolTip。在这种情况下,我想知道是否有可能将其显示为无限时间以及是否有可能检测到工具提示上的点击。

无论如何,如果我点击标签或工具提示,我将需要向用户显示一个 TextBox控件(而不是工具提示或标签),以便它能够修改显示的描述(实际上是显示时间)

== 编辑 2 ==

替代文字 http://lh4.ggpht.com/_1TPOP7DzY1E/Sy9Mk8-Z-xI/AAAAAAAACzo/-5huzSd59j4/s800/UserControl.png

这是我的“透明”用户控件设计

替代文字 http://lh5.ggpht.com/_1TPOP7DzY1E/Sy9MlM31jUI/AAAAAAAACzs/xIJ0hcgOzwo/s800/UserControlForm.png

这是我在运行模式下的表单(用户控件“透明”区域覆盖一个按钮)。

这是用户控件的代码:

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)。该点代表时间位置的对象 - 在链接标签中我需要指定点的时间。用户将能够通过单击时间标签来修改点的时间。

4

1 回答 1

2

创建一个用户控件此处概述了透明度问题的解决方法。

于 2009-12-18T16:02:38.443 回答