Arama butonu
Bu konudaki kullanıcılar: 1 misafir
3
Cevap
588
Tıklama
0
Öne Çıkarma
C# da eventhandler tanımıyor. sorun nerede ?
R
8 yıl
Çavuş
Konu Sahibi

Constructor yeni değeri alıyor ama evetn tarafında sıkıntı var. Event olarak oluşturduğum tetikleyiciyi if bloku içine göremiyorum. Bu yüzden kod ekrana yazılmıyor.

SudentEventArg.cs

namespace exappp
{
public delegate void StudentEventHandler (Student sender, StudentEventArgs e);
//studentEventHandler`i Student sinifi icin olusturduk. Student icin parametre olarak alabiliriz

public class StudentEventArgs : EventArgs // EventArgs sinifindan miras aldik
{
public StudentEventArgs(string PropName, object EskiDeger, object YeniDeger) // Yapici method tetiklendiginde
{
this._propType = PropName;
this._eskiDeger = EskiDeger;
this._yeniDeger = YeniDeger; // Disaridan parametre olarak gelen verileri iceride bellekte olan alana aktariyoruz
}

private object _eskiDeger; // Object tanimladik. boylece ister float gelsin ister string. tipleri kapsar

public object EskiDeger
{
get { return _eskiDeger; }
// set { _eskiDeger = value; } Boylece degerler sadece readonly olmus oluyor set accessor"un disable edilmesi ile
}
private object _yeniDeger;

public object YeniDeger
{
get { return _yeniDeger; }
//set { _yeniDeger = value; }
}

private string _propType;

public string PropType
{
get { return _propType; }
//set { string _propType = value; }
}

}
}




Student.cs

 public class Student
{
public event StudentEventHandler SudentInfoChanged; // delegate olan EventHandler sinifindan event"i olsturduk

private string _adi;

public string OgrenciAdi
{
get { return _adi; }
set {

if (StudentEventArgs.Empty!= null)
{
this.SudentInfoChanged(this, new StudentEventArgs("Ogrenci Adi", this._adi, value));
}
_adi = value; }
}

private string _sinifi;

public string OgrenciSinifi
{
get { return _sinifi; }
set {
if(StudentEventArgs.Empty!=null)
{
this.SudentInfoChanged(this, new StudentEventArgs("Ogrenci Sinifi", this._sinifi, value)); }
_sinifi = value; }
}

private string _numarasi;

public string OgrenciNumarasi
{
get { return _numarasi; }
set {
if (StudentEventArgs.Empty!=null)
{
this.SudentInfoChanged(this, new StudentEventArgs("Ogrenci Numarasi", this._numarasi, value));
}
_numarasi = value; }
}
}
}



form1.cs
namespace exappp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Student ogrenci;
private void button1_Click(object sender, EventArgs e)
{
ogrenci = new Student(); //Bellekte Student sinifindan bir instane olusturuyoruz
ogrenci.OgrenciAdi = Convert.ToString(textBox1.Text);
ogrenci.OgrenciSinifi = Convert.ToString(textBox2.Text);
ogrenci.OgrenciNumarasi = Convert.ToString(textBox3.Text);
Yazdir(ogrenci);
}

private void button2_Click(object sender, EventArgs e)
{
ogrenci.OgrenciAdi = Convert.ToString(textBox1.Text);
ogrenci.OgrenciSinifi = Convert.ToString(textBox2.Text);
ogrenci.OgrenciNumarasi = Convert.ToString(textBox3.Text);
}
void Yazdir(Student ogrenci)
{
richTextBox1.Text = $"Degisiklik yapildi \nOgrenci Adi:{ogrenci.OgrenciAdi} \nOgrenci Numarasi:{ogrenci.OgrenciNumarasi} #\nOgrenci Sinifi: {ogrenci.OgrenciSinifi}";
}

}
}



nullreferanceException was unhandled

An unhandled exception of type 'System.NullReferenceException' occurred in exappp.exe

Additional information: Object reference not set to an instance of an object.


lakin ben break point attıımda yeni değere oluşturduğum değişkene atanmış görünüyor.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



V
8 yıl
Binbaşı

Koduhttps://gist.github.com a koyun ve hata veren satırı belirtin hocam.



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
R
8 yıl
Çavuş
Konu Sahibi

quote:

Orijinalden alıntı: Microsoft Specialist

Koduhttps://gist.github.com a koyun ve hata veren satırı belirtin hocam.
https://gist.github.com/anonymous/ea246b2704b8fe6a8af2e05bd9fa31a3

Sanırım istediğin şekli ie bu idi. pek kullanmadım . hatayı Student sınıfı içindeki ilk set blokunda veriyor

public string OgrenciAdi
{
get { return _adi; }
set {

if (StudentEventArgs.Empty!= null)
{
this.SudentInfoChanged(this, new StudentEventArgs("Ogrenci Adi", this._adi, value));
}
_adi = value; }
}



proje dosyası buradahttp://www55.zippyshare.com/v/7P1pix9r/file.html





< Bu mesaj bu kişi tarafından değiştirildi revere -- 24 Mart 2017; 15:59:53 >
Bu mesaja 1 cevap geldi.
V
8 yıl
Binbaşı

SudentInfoChanged eventi null oldugu icin hata veriyor. eventi cagiracak bir metod olusturacaksin, metodda da "eger event null degilse eventi cagir" diyecek. setter'larda da o metodu cagiracaksin.

kodu kisalttim sadece ogrenci adini kapsayacak sekilde, digerlerine de uygularsin ayni sekilde

.





< Bu mesaj bu kişi tarafından değiştirildi VatandA.Ş. -- 4 Eylül 2021; 17:30:41 >


Bu mesajda bahsedilenler: @revere
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.