PDA

View Full Version : سوال: طراحی Label به شکل قالب صابون



mthreat.info
شنبه 30 آذر 1392, 18:32 عصر
سلام میخواستم بدونم چطوری میشه یه Label رو به شکل قالب صابون طراحی کرد (لبه های گرد) ، ممنون

AMIN_SG
شنبه 30 آذر 1392, 19:46 عصر
سلام
دوست عزیز میتونی از این کد استفاده کنی بجای عدد 45 هم میتونی به میزانی که میخوای گرد بشه عدد وارد کنی و بجای me.height هم میتونی اسم شی های دیگه رو استفاده کنی و این کد رو هم سعی کن تو resize استفاده کنی که اگه lable رو dock کردی بازم درست کار کنه در هنگام تغییر اندازه ی فرم
Private Sub Item_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Dim gp As New System.Drawing.Drawing2D.GraphicsPath
Dim chgcorn As Integer = 45
If chgcorn Mod 10 <> 0 Then
chgcorn = chgcorn - (chgcorn Mod 10)
End If
Dim r1 As New Rectangle(0, Me.Height - chgcorn, chgcorn, chgcorn)
Dim r2 As New Rectangle(Me.Width - chgcorn + 1, Me.Height - chgcorn, chgcorn, chgcorn)
gp.AddArc(0, 0, chgcorn, chgcorn, 180, 90)
gp.AddArc(Me.Width - chgcorn + 1, 0, chgcorn, chgcorn, 270, 90)
gp.AddRectangle(New Rectangle(0, chgcorn / 2, Me.Width, Me.Height - chgcorn))
gp.AddArc(r1, -270, 90)
gp.AddArc(r2, 360, 90)
Region = New Region(gp)
End Sub

sagggad
شنبه 30 آذر 1392, 20:15 عصر
خط آخر هم به جای Region باید بنویسی:
Label1.Region

alonmahdi
شنبه 30 آذر 1392, 22:56 عصر
سلام
دوست عزیز میتونی از این کد استفاده کنی بجای عدد 45 هم میتونی به میزانی که میخوای گرد بشه عدد وارد کنی و بجای me.height هم میتونی اسم شی های دیگه رو استفاده کنی و این کد رو هم سعی کن تو resize استفاده کنی که اگه lable رو dock کردی بازم درست کار کنه در هنگام تغییر اندازه ی فرم
Private Sub Item_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Dim gp As New System.Drawing.Drawing2D.GraphicsPath
Dim chgcorn As Integer = 45
If chgcorn Mod 10 <> 0 Then
chgcorn = chgcorn - (chgcorn Mod 10)
End If
Dim r1 As New Rectangle(0, Me.Height - chgcorn, chgcorn, chgcorn)
Dim r2 As New Rectangle(Me.Width - chgcorn + 1, Me.Height - chgcorn, chgcorn, chgcorn)
gp.AddArc(0, 0, chgcorn, chgcorn, 180, 90)
gp.AddArc(Me.Width - chgcorn + 1, 0, chgcorn, chgcorn, 270, 90)
gp.AddRectangle(New Rectangle(0, chgcorn / 2, Me.Width, Me.Height - chgcorn))
gp.AddArc(r1, -270, 90)
gp.AddArc(r2, 360, 90)
Region = New Region(gp)
End Sub

سلام دوست عزیز باتوجه به این که این پست در قسمت C# ایجاد شده کد ها رو از VB به C# تغییر دهید شاید کسی Vb کار نکرده باشه !
ممنون

mthreat.info
شنبه 30 آذر 1392, 23:02 عصر
سلام
دوست عزیز میتونی از این کد استفاده کنی بجای عدد 45 هم میتونی به میزانی که میخوای گرد بشه عدد وارد کنی و بجای me.height هم میتونی اسم شی های دیگه رو استفاده کنی و این کد رو هم سعی کن تو resize استفاده کنی که اگه lable رو dock کردی بازم درست کار کنه در هنگام تغییر اندازه ی فرم
Private Sub Item_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Dim gp As New System.Drawing.Drawing2D.GraphicsPath
Dim chgcorn As Integer = 45
If chgcorn Mod 10 <> 0 Then
chgcorn = chgcorn - (chgcorn Mod 10)
End If
Dim r1 As New Rectangle(0, Me.Height - chgcorn, chgcorn, chgcorn)
Dim r2 As New Rectangle(Me.Width - chgcorn + 1, Me.Height - chgcorn, chgcorn, chgcorn)
gp.AddArc(0, 0, chgcorn, chgcorn, 180, 90)
gp.AddArc(Me.Width - chgcorn + 1, 0, chgcorn, chgcorn, 270, 90)
gp.AddRectangle(New Rectangle(0, chgcorn / 2, Me.Width, Me.Height - chgcorn))
gp.AddArc(r1, -270, 90)
gp.AddArc(r2, 360, 90)
Region = New Region(gp)
End Sub



خط آخر هم به جای Region باید بنویسی:
Label1.Region


سلام دوست عزیز باتوجه به این که این پست در قسمت C#‎‎ ایجاد شده کد ها رو از VB به C#‎‎ تغییر دهید شاید کسی Vb کار نکرده باشه !
ممنون
آقای AMIN_SG از کدتون ممنونم کلی دنبالش بودم :D
آقای sagggad کد شما رو هم دانلود کردم (تو پست های دیگه) فقط یه چیزی رو رعایت نکرده بودید (شی گرایی) که اصلاحش کردم
چون قراره از این کد به دفعات استفاده نشه پس باید یه کلاس از نوع Label ساخت و متد OnPaint رو override کرد که میشه این

protected override void OnPaint(PaintEventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
int chgcorn = 15;
if (chgcorn % 10 != 0)
{
chgcorn = chgcorn - (chgcorn % 10);
}

Rectangle r1 = new Rectangle(0, Height - chgcorn, chgcorn, chgcorn);
Rectangle r2 = new Rectangle(Width - chgcorn + 1, Height - chgcorn, chgcorn, chgcorn);
gp.AddArc(0, 0, chgcorn, chgcorn, 180, 90);
gp.AddArc(Width - chgcorn + 1, 0, chgcorn, chgcorn, 270, 90);
gp.AddRectangle(new Rectangle(0, chgcorn / 2, Width, Height - chgcorn));
gp.AddArc(r1, -270, 90);
gp.AddArc(r2, 360, 90);
Region = new System.Drawing.Region(gp);
}

ali2914
سه شنبه 05 شهریور 1398, 18:58 عصر
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Ellips_Objects
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect,
int nTopRect,
int nRightRect,
int nBottomRect,
int nWithEllipse,
int nHeightEllipse
);

private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Region = Region.FromHrgn(CreateRoundRectRgn(0, 0, 200, 300, 20, 20));
label1.Region = Region.FromHrgn(CreateRoundRectRgn(0, 0, 200, 300, 20, 20));
this.Region = Region.FromHrgn(CreateRoundRectRgn(0, 0, 900, 1200, 20, 20));
}
}
}

NasimBamdad
پنج شنبه 07 شهریور 1398, 19:15 عصر
عنوان مناسبی استفاده نکردید دوست عزیز ، الان صابون نخل داریم که 100 ساله لبه تیزه و گرد نیست

شما سرچ هم می زدی لبه گرد عنوان بهتری بود ، با صابون چیزی برات نمیاره

danialafshari
پنج شنبه 07 شهریور 1398, 20:54 عصر
https://stackoverflow.com/questions/42627293/label-with-smooth-rounded-corners