我想知道是否有可能自定义我的C#应用程序(winforms)以获得更好的设计,我制作了一个PSD(photoshop文档),所以我可以生成png jpeg ...图片,如果我需要它们。 / p>
我想要的表格示例:
答案 0 :(得分:1)
确实正如评论中指出的那样,很容易使用WPF(indows Presentation Foundation)来实现这一结果,但是如果你真的需要它必须在Windows窗体中制作,我可以帮助你...
确定您的表单没有控件框(最小化,最大化和关闭按钮) 实现你可以设置
form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
我不确定你表单背后的那个星系是否是应用程序的一部分,所以我会考虑它不是 为了实现形式的不规则形状,我们必须在这里做一个解决方法
我们要将Color设置为TransparentKey,因此表单中所有特定颜色的内容都是透明的,就像它不存在一样(如果你点击那部分,它会进入桌面或你背后的任何应用程序)在你的形式) 因此,让我们使用一种我们可能不会在表格中使用的特定颜色
form.TransparencyKey = Color.FromArgb(111, 111, 111); //You can do it by the editor
因此,为了制作白色部分,我们将使用面板的面板和 PictureBox 外部来尝试复制图像的形状
为了让它变得更容易和可重复使用,我将在这个中创建一个userControl 用户控件将具有
现在我们必须在UserControl中创建一些属性,使其无需在其他控件中工作
首先在 HighLightPanel 的SizeChanged事件中,我们将使BackColorPanel在每个方向上的两个点更小,并且它的位置为1; 1,这样我们就可以看到 HighLightPanel
private void HighlightPanel_SizeChanged(object sender, EventArgs e)
{
this.BackColorPanel.Size = new Size(
HighlightPanel.Width - 2,
HighlightPanel.Height - 2);
}
现在我们将创建两个属性来处理Highlight Color
public Color HighlightBorderColor { get; set; }
public Color NonHighlightBorderColor { get; set; }
在 TextBox 的Enter和Leave属性中,我们将更改 HighlightPanel
private void TextBox_Enter(object sender, EventArgs e)
{
HighlightPanel.BackColor = HighlightBorderColor;
}
private void TextBox_Leave(object sender, EventArgs e)
{
HighlightPanel.BackColor = NonHighlightBorderColor;
}
所以现在每次用户输入输入时,输出都会显示指定颜色的边框 现在为了增强它对开发人员的可用性,我们将在其控件中创建一些包装器,以便在编辑器中更轻松地更改子控件的属性
public Image InputImage
{
get { return InputPicture.Image; }
set { InputPicture.Image = value; }
}
public PictureBoxSizeMode InputImageLayout
{
get { return InputPicture.SizeMode; }
set { InputPicture.SizeMode = value; }
}
public char PasswordCharacter
{
get { return TextBox.PasswordChar; }
set { TextBox.PasswordChar = value; }
}
public bool ShowInputImage
{
get { return InputPicture.Visible; }
set { InputPicture.Visible = value; }
}
在InputImage中为用户和密钥设置所需的图片 将两个控件插入您喜欢的位置
如果您希望您的表单在没有边框的情况下可移动,则必须使用此代码段,在WPF中更容易
#region MoveForm
Point LastPoint;
bool ShouldMove;
private void form_MouseDown(object sender, MouseEventArgs e)
{
LastPoint = e.Location;
ShouldMove = true;
this.TransparencyKey = Color.FromArgb(111, 111, 111);
}
private void form_MouseUp(object sender, MouseEventArgs e)
{
ShouldMove = false;
}
private void form_MouseMove(object sender, MouseEventArgs e)
{
if (ShouldMove)
{
this.Location = new Point(
this.Location.X - LastPoint.X + e.X,
this.Location.Y - LastPoint.Y + e.Y);
}
}
#endregion
答案 1 :(得分:-1)
如果你需要很多特殊的图形效果,学习WPF确实会是一个合理的投资。
如果您想要的只是登录屏幕,那么在Winforms中它是微不足道的,并且在您被告知时不会采取任何可怕的黑客攻击。
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.BackColor = System.Drawing.Color.LavenderBlush;
this.TransparencyKey = System.Drawing.Color.LavenderBlush;
this.ControlBox = false;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Text= "";
这七行是表单透明所需的全部内容。我从Designer代码中复制了它们;您只需在属性网格中设置7个属性即可。
现在添加一个面板,将其停靠在底部并赋予其正确的颜色;添加一个图片框和其他控件,你就可以了。
要创建两个输入组,您还需要一些常规控件,只需几行简单的代码:
您放置一个面板BorderStyle = FixedSingle;
并向其添加标签和文本框。标签有AutoSize = False;
,ImageAlign
和TextAlign
都设置为MiddleLeft
。您将图像分配给标签Image
,并在Text
前面添加足够的空白以使其不重叠。显然你应该为第二个TextBox定义一个PasswordChar
。现在,您只需编写Enter
和Leave
事件的脚本,即可更改相应面板之间的BackColor,例如SystemColors.Control
和SystemColors.MenuHighlight
。调整标签大小几乎填满面板,你就完成了。比WPF版本更少的代码,我敢打赌。
如果您需要一次又一次地输入控件,只需为您需要的每种类型创建Usercontrol!
以下是您将会遇到的限制的示例:为图像添加阴影效果会不会很好?它在Winforms中是可行的。但它会涉及到绘画的效果;这将需要至少15或20行所涉及的代码,而不是简单地使用(估计的)1-3个简单的行来改变效果。
你需要任何漂亮的悬停效果吗?不容易,至少可以说..
这些限制将会到处都是,所以这实际上取决于您的要求有多花哨。
也许您应该使用此示例作为首发来比较这两种技术并使您热衷于WPF?