C# | “FormBorderStyle None” olan Formu Taşıma ve Ellipse Form

1Jeff

Developer & Coder
Ultra Member
Katılım
20 Eki 2019
Konular
145
Mesajlar
720
Tepkime puanı
443
Konum
Helsinki
RC Point
0
-Form Ekranını taşımak için-

İlk olarak bir adet windows form applikasyonu açalım ve Form1 ekranımızın FormBorderStyle özelliğini none yapalım. Ardından form ekranımıza bir adet label ekleyelim.

Üç adet değişken tanımlayalım:


C#:
private bool dragging = false;//Sürükleme özelliğimiz
private Point dragCursorPoint;
private Point dragFormPoint;

Form1 elemanımızın olaylar kısmındaki Form1_MouseDown,Form1_MouseMove ve Form1_MouseUp olaylarına çift tıklayalım. Aynı olayları label içinde tanımlayalım. Çünkü label’e üzerine tıklayıp da taşınması gerekmekte.

C#:
private bool dragging = false;
private Point dragCursorPoint;
private Point dragFormPoint;
private void Form1_MouseDown(object sender, MouseEventArgs e)
//Tıkladığımızda mouse tuşu aşağı doğru hareket edince gerçekleşir.
 {
 dragging = true;
 dragCursorPoint = Cursor.Position;
 dragFormPoint = this.Location;
 }
 
 private void Form1_MouseMove(object sender, MouseEventArgs e)
//Mouse hareket ederse gerçekleşecek ifadeler. Biz basılı iken hareket etmesi için dragging tanımladık.
 {
 if (dragging)
 {
 Point dif = Point.Subtract(Cursor.Position, new Size(dragCursorPoint));
 this.Location = Point.Add(dragFormPoint, new Size(dif));
 }
 }
 
 private void Form1_MouseUp(object sender, MouseEventArgs e)
//Mouse tuşu yukarı kalktığında gerçekleşecek ifademiz.
{
 dragging = false;
 }

-Form Kenarlarını Oval Yapmak İçin-

Burada da Gdi32.dll adlı dll’yi formumuza import ediyoruz. Ardından kenar özellikleri için tanımlamamız gereken değişkenler ve metodumuz var. Onları yazalım. Sonrada public Form1() olayı içine metodumuzu ekleyelim.

C#:
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
 private static extern IntPtr CreateRoundRectRgn
 (
 int nLeftRect, // sol üst köşenin x koordinatı
 int nTopRect, // sol üst köşenin y kordinatı
 int nRightRect, // sağ alt köşenin x kordinatı
 int nBottomRect, // sağ alt köşenin y kordinatı
 int nWidthEllipse, // height of ellipse
 int nHeightEllipse // elipsin genişliği
 );
public Form1()
 {
 InitializeComponent();
 Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 40, 40));
//40,40 yaparsanız eşit derecede oval olur. Ancak istediğiniz sayıyı da verebilirsiniz.
}

-Projenin tam hali-

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;//Dll İmport etmek için eklenmeli.
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
 
private bool dragging = false;
private Point dragCursorPoint;
private Point dragFormPoint;
 
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect,
int nTopRect,
int nRightRect,
int nBottomRect,
int nWidthEllipse,
int nHeightEllipse
);
public Form1()
{
InitializeComponent();
Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 40, 40));
}
 
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
dragging = true;
dragCursorPoint = Cursor.Position;
dragFormPoint = this.Location;
}
 
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (dragging)
{
Point dif = Point.Subtract(Cursor.Position, new Size(dragCursorPoint));
this.Location = Point.Add(dragFormPoint, new Size(dif));
}
}
 
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
dragging = false;
}
}
}
 
Üst