Kaydol:
Kayıt Yorumları
(
Atom
)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formlar_arasinda_islemler_form_kontrolleri { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static TextBox textbox = null; private void button_formu_ac_Click(object sender, EventArgs e) { FormNumaralar formnumaralar = new FormNumaralar(); formnumaralar.ShowDialog(); } private void Form1_Load(object sender, EventArgs e) { textbox = new TextBox(); textbox.TextChanged += new EventHandler(textbox_TextChanged); } public void textbox_TextChanged(object sender, EventArgs e) { textBox_girilen_numaralar.Text = (sender as TextBox).Text; } } }Form1 programı çalıştırdığımızda açılacak formdur. Bu form üzerinde numaraları aç butonuna tıklandığında ikinci formumuz açılacak. Bu formun ismi de FormNumaralar olsun. Bu form 0 ile 9 arasındaki rakamları gösteren 10 tane buton, bir tane sil butonu ve bir tane de kapat butonundan oluşmakta. FormNumaralar formunda yapılan işlemler yani her basılan butonun text değerini ana formumuz (Form1) üzerindeki textbox da gösterebilmek için ana formumuzdaki Textbox Nesnesini statik ve public olarak tanımladık.
public static TextBox textbox = null;Böylece FormNumaralar formunda bu textbox aşağıdaki gibi yazarak ulaşmış olacağız.
Form1.textbox.Text += (sender as Button).Text;Yaptığımız bütün değişikleri anında ana formdaki private olarak sürükle bırak şeklinde yerleştirdiğimiz textbox (bu textbox ın ismini textBox_girilen_numaralar olarak atadım) da görmüş olacağız. Bunu da static textbox ın textbox_TextChanged olayında bütün değişikliği aynen ana formdaki textbox ın Text özelliğine eşitliyoruz. Böylece farklı iki form arasındaki buton kontrollerinin Text değerlerini diğer formdaki textbox değerine atamış oluyoruz.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace formlar_arasinda_islemler_form_kontrolleri { public partial class FormNumaralar : Form { public FormNumaralar() { InitializeComponent(); } private void button_kapat_Click(object sender, EventArgs e) { this.Close(); } private void butonlar_click(object sender, EventArgs e) { if (!(sender as Button).Text.Equals("Sil")) Form1.textbox.Text += (sender as Button).Text; else if (Form1.textbox.Text.Length > 0) Form1.textbox.Text = Form1.textbox.Text.Substring(0, Form1.textbox.Text.Length - 1); } } }
Ben anlamadım arkadaş, biraz daha ayrıntılı anlatım yapsanız çok daha iyi olur..
YanıtlaSilYukarı bir kaç açıklama ekledim. Belki burda şu olayı anlamamış olabilirsin. Buradaki anaformda iki tane Textbox var. Biri sürükle bırak ile oluşturulmuş private TextBox, diğeri ise iki form arasındaki bağlantı kullanıl amacıyla public ve static olarak oluşturulmuş Textbox. İkinci formda bu public ve static olana ulaşabliyoruz ve onun değerini değiştiriyoruz. Ana formda da bu static text için textbox.TextChanged olayı ekliyorum. Bununlada static olan textbox da bir değişiklik olur olmaz ana formdaki diğer private textbox ın Text değerini değiştirmiş oluyorum. Takıldığın başka bir soru varsa yaz. Ayrıca Bu işlemi Delegate ve Event kullanarak yapabiliriz.
YanıtlaSilkolay gelsin iyi günler, ben formlar arsı buton kontrolü yapmak istiyorum acaba yardımcı olur musunuz? örneğin form1 den form2 deki butona tıklanıp tıklanmadığını nasıl kontrol ederim?
YanıtlaSil
YanıtlaSilForm1.cs de bir static bool değişken oluştur
public static bool buton1Tıklandi = false;
Form2 de button_click olayında bu değeri true yaparsın. Form1 de işlem yapacağın yerde bu değeri kontrol edebilirsin.
Ama ben Form2 deki button tıklanır tıklanmaz bilmek istiyorum diyorsan event delegate kullanabilirsin. Aşağıdaki sayfaya bakabilirsin.
http://www.csharpuygulamalar.com/2013/06/c-sharp-uygulamalar-event-delegate.html
burada form1 deki buton tıklandığın ile form2 de işlem yapmak için tetikleme fonksiyonu Form1 de çağrılmış. Sen bunun tam tersini yaparak form2 de tıklanan butonun olayında bu tetikleme fonksiyonunu çağıracaksın. Form1 de kontrol edeceksin..
İnşallah açıklayıcı olmuştur
çok teşekkür ederim cevap için, ilk sunduğunuz seçeneği yapmak istedim ama form1 de bool olarak tanımladığım değişkeni form2 de çağıramadım hata verdi, nedeni ne olabilir acaba?
YanıtlaSilForm2 nasıl bir hata verdi ve nasıl çağırdın. Kodu paylaşabilirsen daha kolay cevap verebilirim.
YanıtlaSilEğer 1. seçenekteki gibi static olarak global bir bool değişken tanımladıysan (Form1 de). Form2 de aşağıdaki gibi çağırmalısın
örneğin: Form2 içinde bir buton tıklanma olayının tetiklediği metotta :
....button_click(......)
{
Form1.buton1Tıklandi = true;
}
şeklinde çağırabilirsin.
Ama aldığın hatanın detayını ve kodu paylaşırsan daha kolay yardımcı olabilirim
çok çok teşekkür ederim, sorun çözüldü. ben form1 de tanımladığım değişkeni form2 de buton içinde çağırırken önce
YanıtlaSilform1 frm = new form1();
dedim ve buton click eventi içine de
frm.butonTiklandi = true;
dedim. böyle olunca bu kod satırının altı çizili geliyordu. fakat
form1.butonTiklandi deyince sorun çözüldü, çok sağolun. fakat böyle bir sorun neden olur ki?
form1 frm = new form1();
YanıtlaSilbu yeni bir form nesnesi oluştur demek. Yani sen programda yeni bir pencere oluşturuyorsun. Açık olan penceren form1 diye oluşturduğun ilk nesne. Eğer açık olan penceredeki değeri değiştirmek istiyorsan bu ilk oluşturduğun örneği kullanmalısın. Bundan dolayı hata alıyorsun.
Bir de statik bir değeri örnek ile çağıramazsın.
YanıtlaSilform1 frm = new form1();
frm.butonTiklandi = true;
buradaki butonTiklandi değişkeni static olarak tanımladıysan bunu bir nesnenin örneği ile değil o nesnenin kendisini kullanarak çağırırsın. Sen bu değişkeni tanımladığın classı kullanarak bu değişkene değer atayabili ve kullanabilirsin
Form1.butonTiklandi = true; şeklinde kullanım doğru....
anladım ok çok teşekkür ederim
YanıtlaSilçok çok demek istemiştim, iyi günler kolay gelsin
YanıtlaSil