Çözüldü C# formu ALT + Tab'dan gizleme

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Mucosoft

Megapat
Katılım
5 Mart 2014
Mesajlar
5.516
Makaleler
12
Çözümler
41
C#'da bir formu görev çubuğundan gizlemek mümkün fakat ALT + Tab yapınca pencere gözüküyor. Tamamen gizlemek istiyorum. Bazı kodları denedim fakat yine gizlenmiyor. Çok inatçı çıktı. Bu inatçı formlara karşı ne yapabiliriz?
 
Çözüm
Yine gözüküyor. Acaba bunun çalışması için form load kısmına kod eklemek gerekiyor mu?
Form nesnesinin base paremetrelerini ezdiğimiz için load methodunun içine koyamayız.
Ek olarak formun oluşturulma esnasında ki methodu da ezerek deneyebilir misiniz ? Normalde uzun süredir size gönderdiğim methodu kullanıyorum.
C#:
//constructor içerisine eklenmeli
this.ShowIcon = false;
this.ShowInTaskbar = false;
// constructor dışına eklenmeli
protected override void OnCreateControl()
        {
            base.OnCreateControl();
 
        }

Ayrıca SetWindowLong methodu üzerinden çeşitli form manipülasyonlarını yapıyorum.
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlonga
User32.dll içerisinden import ediliyor.
Hayır. İkincil Form'dan anaformu kapatmak için gerekli o.

İkinci Form, asıl formun alt nesnesi olduğu için asıl Form'dan ikinci formu kapatmak için referans göndermeye gerek yok. Objenin referansına Hide demek yeterli. (2. form hem kendi içerisinden gizlenebilir hem de asıl form üzerinden.)

Bulmaca gibi şifreli şekilde yazmak yerine kaynak kodu atmanız işleri çok daha hızlandıracaktır.
Tamam o zaman o şekilde yapalım.

[CODE lang="csharp" title="Ana Form"]Form1 f = new Form1();
f.Show();[/CODE]

[CODE lang="csharp" title="İkinci Form (Form1)"]Hide();[/CODE]

Bu şekilde yapıyorum. Form1 gizlenmiyor.
 
[CODE lang="csharp" title="Form1"]public partial class Form1 : Form
{
private AltForm ikinciForm;

public Form1()
{
InitializeComponent();
}

private void buttonShowHide_Click(object sender, EventArgs e)
{
if(!AltForm.isExist)
{
ikinciForm = new AltForm();
}


if(!ikinciForm.isOn)
{
ikinciForm.Show();
ikinciForm.isOn = true;
}
else
{
ikinciForm.Hide();
ikinciForm.isOn = false;
}
this.buttonShowHide.Text = ikinciForm.isOn ? "Gizle" : "Göster";
}
}[/CODE]

[CODE lang="csharp" title="AltForm"]public partial class AltForm : Form
{
public static bool isExist = false;
public bool isOn = false;
public AltForm()
{
InitializeComponent();
this.Hide();
}

private void AltForm_Load(object sender, EventArgs e)
{
isExist = true;
}

private void AltForm_FormClosing(object sender, FormClosingEventArgs e)
{
isExist = false;
}
}[/CODE]

Form1 içerisinde tek bir buton var sadece.

Bu örneği iyice inceleyin.
 
[CODE lang="csharp" title="Form1"]public partial class Form1 : Form
{
private AltForm ikinciForm;

public Form1()
{
InitializeComponent();
}

private void buttonShowHide_Click(object sender, EventArgs e)
{
if(!AltForm.isExist)
{
ikinciForm = new AltForm();
}


if(!ikinciForm.isOn)
{
ikinciForm.Show();
ikinciForm.isOn = true;
}
else
{
ikinciForm.Hide();
ikinciForm.isOn = false;
}
this.buttonShowHide.Text = ikinciForm.isOn ? "Gizle" : "Göster";
}
}[/CODE]

[CODE lang="csharp" title="AltForm"]public partial class AltForm : Form
{
public static bool isExist = false;
public bool isOn = false;
public AltForm()
{
InitializeComponent();
this.Hide();
}

private void AltForm_Load(object sender, EventArgs e)
{
isExist = true;
}

private void AltForm_FormClosing(object sender, FormClosingEventArgs e)
{
isExist = false;
}
}[/CODE]

Form1 içerisinde tek bir buton var sadece.

Bu örneği iyice inceleyin.
Teşekkürler. Deneyince bilgi vereceğim.
Merhaba @The Anorak, sonuç olarak "Load" fonksiyonunda "Hide();" kodunun çalışmadığını tespit ettim.
 
Son düzenleme:
Bu kodu form .cs dosyasına eklerseniz alt+tab'dan gizlemiş olacaksınız.

C#:
protected override CreateParams CreateParams
{
    get
    {
        var Params = base.CreateParams;
        Params.ExStyle |=0x00000080;
        return Params;
    }
}
 
Bu kodu form .cs dosyasına eklerseniz alt+tab'dan gizlemiş olacaksınız.

C#:
protected override CreateParams CreateParams
{
    get
    {
        var Params = base.CreateParams;
        Params.ExStyle |=0x00000080;
        return Params;
    }
}
Teşekkürler, denedikten sonra bilgi vereceğim.

C#:
namespace ALT_TAB_Yazılım_Gizleme
{
    public partial class Form1 : Form
    {
        protected override CreateParams CreateParams
        {
            get
            {
                var Params = base.CreateParams;
                Params.ExStyle |= 0x00000080;
                return Params;
            }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}
Örneği bu şekilde test ettim fakat bir şey değişmedi.
 
Son düzenleme:
Teşekkürler, denedikten sonra bilgi vereceğim.

C#:
namespace ALT_TAB_Yazılım_Gizleme
{
    public partial class Form1 : Form
    {
        protected override CreateParams CreateParams
        {
            get
            {
                var Params = base.CreateParams;
                Params.ExStyle |= 0x00000080;
                return Params;
            }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}
Örneği bu şekilde test ettim fakat bir şey değişmedi.
Rica etsem şu kod bloğunu deneyebilir misiniz ? Flag'leri yanlış girmişim telefondan yazdığım için
C#:
protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= 0x20000;
                cp.ExStyle |= 0x80;
                return cp;
            }
        }
 
Rica etsem şu kod bloğunu deneyebilir misiniz ? Flag'leri yanlış girmişim telefondan yazdığım için
C#:
protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= 0x20000;
                cp.ExStyle |= 0x80;
                return cp;
            }
        }
Yine gözüküyor. Acaba bunun çalışması için form load kısmına kod eklemek gerekiyor mu?
 
Yine gözüküyor. Acaba bunun çalışması için form load kısmına kod eklemek gerekiyor mu?
Form nesnesinin base paremetrelerini ezdiğimiz için load methodunun içine koyamayız.
Ek olarak formun oluşturulma esnasında ki methodu da ezerek deneyebilir misiniz ? Normalde uzun süredir size gönderdiğim methodu kullanıyorum.
C#:
//constructor içerisine eklenmeli
this.ShowIcon = false;
this.ShowInTaskbar = false;
// constructor dışına eklenmeli
protected override void OnCreateControl()
        {
            base.OnCreateControl();
 
        }

Ayrıca SetWindowLong methodu üzerinden çeşitli form manipülasyonlarını yapıyorum.
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlonga
User32.dll içerisinden import ediliyor.
 
Çözüm
Form nesnesinin base paremetrelerini ezdiğimiz için load methodunun içine koyamayız.
Ek olarak formun oluşturulma esnasında ki methodu da ezerek deneyebilir misiniz ? Normalde uzun süredir size gönderdiğim methodu kullanıyorum.
C#:
//constructor içerisine eklenmeli
this.ShowIcon = false;
this.ShowInTaskbar = false;
// constructor dışına eklenmeli
protected override void OnCreateControl()
        {
            base.OnCreateControl();
 
        }

Ayrıca SetWindowLong methodu üzerinden çeşitli form manipülasyonlarını yapıyorum.
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlonga
User32.dll içerisinden import ediliyor.
Bu kod çalıştı. Verdiğiniz değerli bilgiler için teşekkür ediyorum. :) İsterseniz 2 kodu birleştirin, çözüm olarak işaretleyelim.
 
Rica ederim ne demek. Faydalı olabildiysem ne mutlu bana.☺️
C#:
protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= 0x20000;
                cp.ExStyle |= 0x80;
                return cp;
            }
        }

protected override void OnCreateControl()
        {
            base.OnCreateControl();
            //user32.dll üzerinden SetWindowLong import edilerek ilave form manipülasyonları yapılabilir.
        }

//constructor içerisine eklenmeli
this.ShowIcon = false;
this.ShowInTaskbar = false;
 

Geri
Yukarı