【问题标题】:Link two controls in one将两个控件合二为一
【发布时间】:2010-12-28 02:15:48
【问题描述】:

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

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

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

谢谢。

==编辑 1==

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

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

== 编辑 2 ==

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

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

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

【问题讨论】:

  • 对编辑 2 的响应:您是否将不透明度设置为零?
  • @Josh:是的...默认为 0。我也将它设置为 5,但这并没有改变,而是背景颜色的细微差别。

标签: .net winforms .net-2.0 controls powerpacks


【解决方案1】:

创建一个User Control。概述了透明度问题的解决方法here

【讨论】:

  • 好的,我在我的帖子中用 bold 证明了 UserControl 这个词。
  • 那么创建一个,聪明人。这正是您所需要的。
  • 那么您应该考虑解决根本问题。 粗体social.msdn.microsoft.com/forums/en-US/winforms/thread/…
  • 答案已更新。标签空间问题是下一个要关注的问题。我看看能不能找到什么。一次一件事:)
  • 隐形解决方案不起作用。请参阅我的编辑。单击标签间隙也是有问题的(不可能?)。我无法覆盖 UserControl 的 HitTest() 函数。我的标签在绘制的背景上移动。我无法使 userControl 背景透明。如果我点击两个标签之间的空间重叠其他标签,这些背面标签也应该响应点击事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 2015-12-30
  • 2019-05-26
  • 1970-01-01
相关资源
最近更新 更多