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

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

Daha fazlası için: gorselprogramlama.com

 

Merhaba ben Abdurrahman ÖNDER. Bilindiği gibi formBorderStyle eğer none ise form ekranı taşınmaz ve form ekranımız dikdörtgen şeklindedir. Bu programımızda amacımız tam da bu. Herhangi bir Windows Formumuzun FormBorderStyle özelliğinin none olması halinde formu mouse ile istediğimiz yere sürükleyebilmek ve kenarlarını daha oval yapmak.

 

-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:

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.

[code language=”csharp”]
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;
}
[/code]

 

 

-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.

[code language=”csharp”]
[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.
}
[/code]

 

 

-Projenin tam hali-

[code language=”csharp”]

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;
}
}
}

[/code]

 

Faydalı olabildiysem ne mutlu bana. Her türlü fikir ve ödev için mail(abdurrahman.onder@ogr.sakarya.edu.tr) atabilirsiniz.

Projeyi İndirmek İçin Tıklayınız.

Daha fazlası için: gorselprogramlama.com

Yorumlar 1

  • Yardımcı olduğunuz için teşekür ederiz…Sizin gibi kod sever gönülü arkadaşların çoğalması gerekiyor. :)))

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir