10 Şubat 2014 Pazartesi

C Sharp Uygulamalar Formlar Arası Kontrollerin Yönetimi ve Formlar Arası TextBox Kontrolü



KONU : C sharp Form Uygulamalar Formlar arası işlem yapma




C Sharp Form Uygulamalar formlar arasında kontroleri yönetme 

UYGULAMAYI İNDİR



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

    }
}


UYGULAMAYI İNDİR

11 yorum :

  1. Ben anlamadım arkadaş, biraz daha ayrıntılı anlatım yapsanız çok daha iyi olur..

    YanıtlaSil
  2. Yukarı 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ıtlaSil
  3. kolay 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

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

    YanıtlaSil
  5. ç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ıtlaSil
  6. Form2 nasıl bir hata verdi ve nasıl çağırdın. Kodu paylaşabilirsen daha kolay cevap verebilirim.

    Eğ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

    YanıtlaSil
  7. ç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
    form1 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?

    YanıtlaSil
  8. form1 frm = new form1();

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




    YanıtlaSil
  9. Bir de statik bir değeri örnek ile çağıramazsın.

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

    YanıtlaSil
  10. anladım ok çok teşekkür ederim

    YanıtlaSil
  11. çok çok demek istemiştim, iyi günler kolay gelsin

    YanıtlaSil