Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
18
Cevap
53529
Tıklama
0
Öne Çıkarma
C#->1.Form'dan 2.Form'a Geçerken 1.Form'u Kapatmak
R
16 yıl
Binbaşı
Konu Sahibi

Merhabalar;

C# da yaptığım uygulamada iki tane form kullandım. Bu formlardan biri parola ekranı diğeri ise programın asıl form'u. Şimdi kullanıcı parolayı bilince form2 otomatik olarak kapanıp form1 açılıcak. Ama bu geçiş kısmını yaptığım halde kapatma olayını yapamadım.

Ben 2.form'u kapatıp 1.form'u açmak için this.Close(); , this.Hide. .... komutlarını denedim olmadı. Sadece form'u gizliyor. Ama programı kapattığımda arka planda çalışıyor. Ben istiyorum ki 2.form tamamen kapansın 1. form açılsın. Ama bir türlü yapamadım. Şimdilik sadece gizleyebiliyorum. Nasıl yapabilirim?

Buradaki kod giriş butonu için;


Form1 anasayfa = new Form1(); 
if (textBox1.Text == "Parola")
{
MessageBox.Show("Başarıyla giriş yaptınız", "Hoş Geldiniz", MessageBoxButtons.OK, MessageBoxIcon.Information);
anasayfa.Show();
}
if (textBox1.Text == "")
{
MessageBox.Show("Lütfen metin kutusunu boş bırakmayınız.", "Metin Kutusu Boş", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{

i--;
if (i == 0)
{
MessageBox.Show("Hakkınız bittiği için program kapatılıyor. Kendinize iyi bakın.", "Program Kapanıyor", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
else
{
MessageBox.Show(i.ToString() + " hakkınız kaldı. Lütfen doğru parolayı giriniz.", "Parola Yanlış Girildi", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}



E
16 yıl
Teğmen

Gizlemek değil kapatmak istiyor. Eğer 2.Formun objesini 1.Formda yaratıp ondan sonrada 1. formdan çağırıyorsan ilk formu kapatamazsın, yapabileceğin tek şey gizlemek olur.


Bu mesaja 1 cevap geldi.
R
16 yıl
Binbaşı
Konu Sahibi

Teşekkürler peki kapatma işlemini nasıl yapmalıyım?

Olay şu. Elimde iki tane form var. Form1.cs(İlk), Form2(Son).cs

Ben programımı Form2.cs ile başlatıyorum. Program.cs den başlangıç olarak Form2.cs yi gösterdim. Form2.cs de şu işlemi yapıyorum. Form1'i tanıtıp o form'a geçiş yapıyorum. Ama bu geçiş esnasında Form2.cs tamamen kapansın ve Form1.cs açılsın. Ben gizlemek istemiyorum. Ama ne yapmam gerektiğini tam olarak bilmiyorum.


Bu mesaja 1 cevap geldi.
D
16 yıl
Çavuş

formların dispose metodları olur, ikinci formu göster, 1. formu dispose et.


Bu mesaja 1 cevap geldi.
E
16 yıl
Teğmen

kcomeby 2.form'u 1.formda oluşturuyor dikkat edersen eğer 1.formu dispose ederse 2.formda kapanır. Programın bir main formu olacak ve diğer formları bu ana form üzerinden çağıracaksın bu kaçınılmaz. Şunu yapabilirsin, programın main formu olarak Form2'yi değil Form1'i göster, daha sonra Form1'in shown() metodunda form2'yi oluştur form1'i gizle ve form2.showdialog() ile çağır, form2'yi kapatırken dispose et, ve form2'den dönüşteki koda form1'i tekrar göster.

 
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

//form1 kısmı burada form1'e genel bir bool değişken tanımlayı o değişkeni form2 üzerinden değiştirerek form2'yi gösterip göstermiyeceğine karar
//verebilirsin
private void Form1_Shown(object sender, EventArgs e)
{
Form2 fr2 = new Form2();
this.Visible = false;
fr2.ShowDialog();
this.Visible = true;
}

//form2'de senin kodların olacak zaten


Bu mesaja 1 cevap geldi.
R
16 yıl
Binbaşı
Konu Sahibi

Teşekkürler. Deneyeceğim.


Bu mesaja 1 cevap geldi.
R
16 yıl
Binbaşı
Konu Sahibi

Program.cs içindeki kodlardır.

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace KingXP_İnce_Ayar_Merkezi
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
private void Form1_Shown(object sender, EventArgs e)
{
Form2 fr2 = new Form2();
this.Visible = false;
fr2.ShowDialog();
this.Visible = true;
}
}
}


Ben şu satırı anlamadım. (form1 kısmı burada form1'e genel bir bool değişken tanımlayı o değişkeni form2 üzerinden değiştirerek form2'yi gösterip göstermiyeceğine karar verebilirsin). Bu satıra göre tam olarak ne yapmam gerekiyor? Rica etsem o kısmı gösterebilirmisiniz? Kodları yukarıdaki gibi derleyince "'Form1_Shown': cannot declare instance members in a static class" hatasını alıyorum.

Bu arada sizin yazdığınız yazıda da şu kısmı anlamadım.

quote:

form2'yi kapatırken dispose et, ve form2'den dönüşteki koda form1'i tekrar göster.

Kalın gösterdiğim yeri anlamadım. Ayrıca kapatırken dispose etme olayını şöyle mi yapacağım?(Olay doğru mu?)

 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
{
Dispose();
}


Teşekkürler.


Bu mesaja 1 cevap geldi.
E
16 yıl
Teğmen

Hımm evet mevzuyu pek anlamamışsın. Form1.Shown event'i form1.cs'de olacak program.cs'de değil. Form1'i açıp properties'de event tab'ını seçersen orada shown eventini göreceksin zaten, ona çift tıkla o sana fonksiyonu oluşturur içine benim yazdığım kodları yaz. dispose işide this.dispose() şeklinde oluyor.


Bu mesaja 1 cevap geldi.
R
16 yıl
Binbaşı
Konu Sahibi

Teşekkürler. Teknik olarak çalışıyor. Ama başka kodlar kullandığım için o işlemi sona bırakıcam. Aklıma takılan ufak bir sorun var.

If ile kayıt defterine nasıl erişebilirim? Mesela kayıt defterinde Local Machine altında A adlı bir klasör var. Bu klasör içinde de deneme isimli bir key var. Değeride 12345 olsun. Ben diyorum ki Eğer Local Machine altında A adlı klasörün altında ismi deneme değeri 12345 olan bir girdi varsa şu işlemleri yap.
Yada Eğer Local Machine altında A adlı bir klasör varsa şu işlemleri yap. Ben çok uğraştım ama yapamadım. Çıkmaz sokak gibi. Yapacağım uygulamada
kullanıcı CheckBox'ları kullanarak ince ayar seçiyor. Ama uygulama kapanınca CheckBox'ların işareti gidiyor. Ben program açılışında girdinin ekli olup olmadığını kontrol ettirerek checkBox1.Checked=true; checkbox'ı işaretleyeceğim. Böylece kullanıcı hangi işlemleri yaptığı bilecek. Yapamadığım için alternatif yöntemleri düşündüm. Veritabanı ve ini dosyası kullanmayı düşündüm. Ama kullanıcı kendisi silebilir diye yapamadım. Acaba nasıl yapabilirim?





< Bu mesaj bu kişi tarafından değiştirildi RC-1138 -- 6 Haziran 2009; 17:16:35 >
Bu mesaja 1 cevap geldi.
E
16 yıl
Teğmen

Yanlış hatırlamıyorsam Microsoft.Win32 namespace'ini kullanman gerekiyor
RegisteryKey rk= Registery.LocalMachine.CreateSubKey("Burada senin ayarların durduğu yeri göster");ile registerye erişecek nesneyi oluşturur
rk.GetValue("ulaşmak istediğin key'in adı") ;fonksiyonu ilede okursun.
rk.SetValue("key","değer"); ilede o registery key'ine yazarsın.

var olup olmadığı kontrolünü Null'mı değilmi şeklinde yapabilirsin.


Bu mesaja 1 cevap geldi.
R
16 yıl
Binbaşı
Konu Sahibi

Yok. Ne yazık ki olmadı. Çok denedim. Sanırım ini dosyalarına başvurmaya çalışacağım. Yardımınız ve ilginiz için teşekkür ederim.


Bu mesaja 1 cevap geldi.
K
15 yıl
Er

Form1.ActiveForm.Hide();
Form2 frm2 = new Form2();
frm2.ShowDialog();


Bu mesaja 1 cevap geldi.
K
15 yıl
Er

aynısını diger formada yazman lazım ama bu şekilde sadece butana tıkladıgında duger formu cagırır eger x butanına bastıgındanda cıkmasını istiyorsan altına şunlarıda ekle


Form1.ActiveForm.Hide();
Form2 frm2 = new Form4();
frm2.ShowDialog();
--> Form1 frm1 = new Form1();
frm1.Visible = true; <--





eğer form2 ye başka bir deger (mesela kullanıcı adını atacaksan) yukardaki koda şunuda eklemelisin ama unutmamalıyız ki textbox3 ve textbox6 Private değil Public olmalı....


Form1.ActiveForm.Hide();
Form2 frm2 = new Form4();
--> frm2.textBox6.Text = textBox3.Text.ToString(); <--
frm2.ShowDialog();
Form1 frm1 = new Form1();
frm1.Visible = true;


Bu mesaja 1 cevap geldi.
Y
13 yıl
Er

quote:

Orijinalden alıntı: konti73

aynısını diger formada yazman lazım ama bu şekilde sadece butana tıkladıgında duger formu cagırır eger x butanına bastıgındanda cıkmasını istiyorsan altına şunlarıda ekle


Form1.ActiveForm.Hide();
Form2 frm2 = new Form4();
frm2.ShowDialog();
--> Form1 frm1 = new Form1();
frm1.Visible = true; <--





eğer form2 ye başka bir deger (mesela kullanıcı adını atacaksan) yukardaki koda şunuda eklemelisin ama unutmamalıyız ki textbox3 ve textbox6 Private değil Public olmalı....


Form1.ActiveForm.Hide();
Form2 frm2 = new Form4();
--> frm2.textBox6.Text = textBox3.Text.ToString(); <--
frm2.ShowDialog();
Form1 frm1 = new Form1();
frm1.Visible = true;


Teşekürler :D


Bu mesaja 1 cevap geldi.
K
13 yıl
Çavuş

Arkadaşım Form2 nin Formclose olayına form2yi içine attıgın değişkeni sonlandıracaksın.

frm2.close();


Bu mesaja 1 cevap geldi.
N
11 yıl
Er

this.Dispose();
Form2.Show();


Bu mesaja 1 cevap geldi.
A
11 yıl
Er

KARDEŞ BUNLARIN HEPSİ BOŞ FAZLALIK BİLGİLER AMA BEN VERİM SANA

FORM1 FRM =NEW FORM2();

FRM.SHOW(); DEDİN GEÇİŞ YAPTIN HEMEN ALTNADA

THİS.HİDE();

YAZDIGIN ZAMAN SIKINTI ÇÖZÜLÜR


Bu mesaja 1 cevap geldi.
K
11 yıl
Teğmen

bende atkesenin dedğini dicektim tam this.hide en mantıklısı ve en olabilitesi yüksek olan


Bu mesaja 1 cevap geldi.
P
10 yıl
Er

FORM 2 DE BOTTONA BUNU YAZARSANIZ İSE YARAR İSTEDİGİNİZ KADAR FORM ACIN Bİ ÖNCEKİNİ KAPATMAK İÇİN ASAGIDAKİ KODA İHTİYAC DUYACAKSINIZ

Form3 frm3 = new Form3();
this.Hide();
frm3.ShowDialog();
BU SEKİLDE YAPIN BEYLER DİYER TÜRLÜ OLMUYOR
Form3 frm3 = new Form3(); // olmuyor denemeyin
frm3.ShowDialog(); //olmuyor denemeyin
this.Hide(); //olmuyor denemeyin





< Bu mesaj bu kişi tarafından değiştirildi PİSTELERO 16 -- 11 Şubat 2015; 21:15:32 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.