【问题标题】:C# Button with Image does not get 'pushed' in when clicked带有图像的 C# 按钮在单击时不会被“推入”
【发布时间】:2011-02-10 16:40:11
【问题描述】:

我正在涉足 C#,但我对它相当缺乏经验。我有一个带有文本和图像的按钮。当我运行程序并按下按钮时,按钮与文本一起被推入,但图像保持静态。

有人知道解决方法吗?

*编辑:

    this.btnRename.AllowDrop = true;
    this.btnRename.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                | System.Windows.Forms.AnchorStyles.Right)));
    this.btnRename.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
    this.btnRename.Image = ((System.Drawing.Image)(resources.GetObject("btnRename.Image")));
    this.btnRename.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
    this.btnRename.Location = new System.Drawing.Point(675, 3);
    this.btnRename.Margin = new System.Windows.Forms.Padding(0);
    this.btnRename.Name = "btnRename";
    this.btnRename.Size = new System.Drawing.Size(55, 48);
    this.btnRename.TabIndex = 7;
    this.btnRename.Text = "&Rename";
    this.btnRename.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
    this.btnRename.UseVisualStyleBackColor = false;
    this.btnRename.Click += new System.EventHandler(this.btnRename_Click);

【问题讨论】:

  • 文本也应该是静态的。打开 Designer.cs 文件,找到初始化按钮的代码并将其发布到您的问题中。
  • 我不知道你想做什么。你想让图像左右移动 1 个像素吗?如果是这样,你为什么想要这样的行为?尝试单击仅带有文本的普通按钮,文本也保持静态。我建议您让 .net 框架与操作系统一起决定如何呈现按钮以及单击效果应该如何表现。这为在该操作系统下运行的所有应用创建了一个共同的外观。
  • 我的意思是,当您按下按钮时,按钮和文本会缩进,就像您实际按下按钮一样。同样的行为不适用于图像。
  • 在我的 PC (Windows 7) 上,当我按下按钮时,按钮的文本不会缩进...因此,图像也不应该移动以保持一致的行为。
  • 不知道其他人在做什么,但对我来说,当点击按钮时,文本确实会被向下和向右推 - 似乎是 1 个像素 - 但图像保持静止。如果他们真的没有发生这种情况,也许这是一个操作系统设置,但我无法想象一个文本不移动的按钮。 KrisTrip 下面的解决方案似乎效果很好。

标签: c# winforms image button


【解决方案1】:

.NET 不会自动为您执行此操作,因为它不知道您希望单击按钮时图像会发生什么。您是否希望它更小,向右移动,向左移动......等等。也许您可以实现 MouseDown 和 MouseUp 事件?在 MouseDown 上,您可以让它将图像更改为您希望看到的“推入”图像,然后在 MouseUp 上将其更改回。当然,这涉及到您基本上拥有 2 张图像,一个“点击”版本和一个“正常”版本。

【讨论】:

  • 这将是资源地狱的维护......如果你真的想要的话,我会选择一个图像处理程序(比如:MouseDown = imageclone + 1px margin 或其他东西)
  • 我不买这个答案;我所期望的似乎很明显,对图像和文本做同样的事情:移动 r/d。我猜 .NET 不会这样做,因为他们没有打扰/注意到。
  • 我想我应该说一些更像 .NET 的东西“可能”不会这样做,因为...我并没有声称对 Microsoft 有任何内部知识。答案的重点是提出一种获得相同功能的方法。另一种选择是使用 WPF 而不是 WinForms,它允许您执行转换。
  • 有两个单独的图标会导致臃肿,所以我不太赞成它。不过 WPF 的想法很有趣,我会尝试实现它。
猜你喜欢
  • 2016-08-26
  • 2013-06-08
  • 2014-09-17
  • 1970-01-01
  • 2023-04-03
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多