Çözüldü C# Form'daki nesneyi farklı bir classta çağırma

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

Jroxy

Hectopat
Katılım
21 Aralık 2018
Mesajlar
365
Çözümler
3
Yer
Sivas
Daha fazla  
Meslek
Öğrenci
1662372248628.png

Buradaki checkbox'u
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek)
        {
            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            email.IsBodyHtml = true;
            email.Body = icerik;
            if (Ek != string.Empty)
            {
                email.Attachments.Add(new Attachment(Ek));
               
            }
                sc.Send(email);






        }
Şu şekilde kullanmak istiyorum fakat checkbox1 nesnesini çağıramıyorum.
C#:
 MailMessage email = new MailMessage();

            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);

            email.To.Add(AliciMail);

            email.Subject = Baslik;
if(checkBox1.Checked==true)
{
    email.IsBodyHtml = true;
}
else
{
    email.IsBodyHtml=false;

}

           

            email.Body = icerik;

@M(i)usa
 
Son düzenleyen: Moderatör:
Çözüm
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek)
        {

            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            Form1 f1 = new Form1();
            if(f1.checkBoxHtml.Checked == true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml = false;
            }

Şu şekilde bir çözüm buldum fakat checkbox tikli olsa da tikli olmasa da html düzende yollamıyor epostayı.
Chekbox'ına iki defa tıkladığında checkBoxHtml_Changed fonksiyonu oluşacaktır. Daha sonra public olarak tanımladığın bir bool değerinin bunun içinde değiştirmelisin.
Tanımladığımız public bool html = false; ise;

C#:
private void checkBoxHtml_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBoxHtml.Checked == true)
                html = true;
        }else
        {
          html = false;   
        }

Şeklinde bir kod yazarsın. Daha sonra publicte tanımladığın bool'u Microsoft fonksiyonuna parametre verirsin. Bu parametreyi kontrol ederek içeriğinin html olup olmayacağını belirlersin.
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek, bool kontrol)
        {

            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            Form1 f1 = new Form1();
            if(kontrol == true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml = false;
            }
Fonksiyonun kodu da bu şekilde olur. Kontrol parametresine publicte tanımladığın bool'u verirsin. Yani metodunu çağırırken;
Microsoft(içerikler, alıcı vs., html); şeklinde olur.
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek)
        {
            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
           if(checkBox1.Checked==true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml=false;
            }
            email.Body = icerik;
            if (Ek != string.Empty)
            {
                email.Attachments.Add(new Attachment(Ek));
               
            }
                sc.Send(email);
        }
    }
}


bu şekilde düzenleyebilirsin.
 
Fonksiyonlar içine direkt olarak nesneleri çağıramazsın. Bunun yerine oluşturduğun metoda parametre olarak bir CheckBox ver ve bunun üzerinden işlem yap.
Aşağıdaki metoda CheckBox mycheckbox diye bir parametre ekledik. Metodunu çağırırken bu parametreye checkBox1 verdiğinde metod içindeki checkbox'un senin checkBox1'in olur ve onun Checked özelliğini kontrol eder. Nesnelere erişim fonksiyonlarda bu şekilde sağlanmaktadır.

C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek, CheckBox mycheckbox)
        {
            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
           if(mycheckbox.Checked==true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml=false;
            }
            email.Body = icerik;
            if (Ek != string.Empty)
            {
                email.Attachments.Add(new Attachment(Ek));
           
            }
                sc.Send(email);
        }
    }
}

C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek)
        {
            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
           if(checkBox1.Checked==true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml=false;
            }
            email.Body = icerik;
            if (Ek != string.Empty)
            {
                email.Attachments.Add(new Attachment(Ek));
              
            }
                sc.Send(email);
        }
    }
}


bu şekilde düzenleyebilirsin.
Bu şekilde bir kullanımda nesneyi bulamazsınız.
 
Son düzenleme:
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek)
        {

            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            Form1 f1 = new Form1();
            if(f1.checkBoxHtml.Checked == true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml = false;
            }

Şu şekilde bir çözüm buldum fakat checkbox tikli olsa da tikli olmasa da html düzende yollamıyor epostayı.
 
Çözüldü mü bilmiyorum ama bir forumdaki nesneleri farklı yerlerde çağırmak işlemi için ilk olarak o nesneyi ''public'' olarak tanımlaman gerekiyor.

Örnek:
Kod:
public CheckBox checkBox1;

Bu şekilde tanımladıktan sonra nesneyi çağırmak için ilk olarak hangi forum üzerinde olduğunu belirtmen gerekiyor.

Main kısmı kullandığın nesnenin bulunduğu formun ismidir.

Örnek:
Kod:
Main.checkbox1.checked==true;


Basit bir yöntem olarak nesneye tıkladığında özellikler kısmından public olarak tanımlamasını yapabilirsin.


Yazdığın konudan forumda kullandığım nesneleri class vb çalışmalarda nesne çağıramıyorum şeklinde anladım ona istinaden küçük örnekler oluşturdum umarım işine yarar.
 
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek)
        {

            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            Form1 f1 = new Form1();
            if(f1.checkBoxHtml.Checked == true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml = false;
            }

Şu şekilde bir çözüm buldum fakat checkbox tikli olsa da tikli olmasa da html düzende yollamıyor epostayı.
Chekbox'ına iki defa tıkladığında checkBoxHtml_Changed fonksiyonu oluşacaktır. Daha sonra public olarak tanımladığın bir bool değerinin bunun içinde değiştirmelisin.
Tanımladığımız public bool html = false; ise;

C#:
private void checkBoxHtml_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBoxHtml.Checked == true)
                html = true;
        }else
        {
          html = false;   
        }

Şeklinde bir kod yazarsın. Daha sonra publicte tanımladığın bool'u Microsoft fonksiyonuna parametre verirsin. Bu parametreyi kontrol ederek içeriğinin html olup olmayacağını belirlersin.
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek, bool kontrol)
        {

            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            Form1 f1 = new Form1();
            if(kontrol == true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml = false;
            }
Fonksiyonun kodu da bu şekilde olur. Kontrol parametresine publicte tanımladığın bool'u verirsin. Yani metodunu çağırırken;
Microsoft(içerikler, alıcı vs., html); şeklinde olur.
 
Çözüm
Chekbox'ına iki defa tıkladığında checkBoxHtml_Changed fonksiyonu oluşacaktır. Daha sonra public olarak tanımladığın bir bool değerinin bunun içinde değiştirmelisin.
Tanımladığımız public bool html = false; ise;

C#:
private void checkBoxHtml_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBoxHtml.Checked == true)
                html = true;
        }else
        {
          html = false;  
        }

Şeklinde bir kod yazarsın. Daha sonra publicte tanımladığın bool'u Microsoft fonksiyonuna parametre verirsin. Bu parametreyi kontrol ederek içeriğinin html olup olmayacağını belirlersin.
C#:
namespace Mail_Gönderme_Cart_Curt.Models
{
    public class SendMail
    {
 
       public void Microsoft(string GondericiAdSoyad,string GondericiMail,string GondericiPass,string AliciMail,string Baslik ,string icerik, string Ek, bool kontrol)
        {

            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.outlook.com";
            sc.EnableSsl = true;
            sc.Credentials = new NetworkCredential(GondericiMail, GondericiPass);


            MailMessage email = new MailMessage();
            email.From = new MailAddress(GondericiMail, GondericiAdSoyad);
            email.To.Add(AliciMail);
            email.Subject = Baslik;
            Form1 f1 = new Form1();
            if(kontrol == true)
            {
                email.IsBodyHtml = true;
            }
            else
            {
                email.IsBodyHtml = false;
            }
Fonksiyonun kodu da bu şekilde olur. Kontrol parametresine publicte tanımladığın bool'u verirsin. Yani metodunu çağırırken;
Microsoft(içerikler, alıcı vs., html); şeklinde olur.
Çok teşekkür ederim çalıştı kod.
 
E-posta gönderici hizmetin Form'un kontrolüne bağımlı olmaması gerekiyor. Sizce de saçma değil mi? E-posta göndermek ile Form'u yönetmek çok bağımsız şeyler. E-posta ile ilgili şeyleri gerek modellerle gerek parametrelerle alıp kullanmanız gerekiyor.
 
E-posta gönderici hizmetin Form'un kontrolüne bağımlı olmaması gerekiyor. Sizce de saçma değil mi? E-posta göndermek ile Form'u yönetmek çok bağımsız şeyler. E-posta ile ilgili şeyleri gerek modellerle gerek parametrelerle alıp kullanmanız gerekiyor.
Tabii ki ilgili client'ı public alanda bir defa açsa ve bu clientı da parametre olarak verip işlem yapsa hoş olur ancak arkadaşımız olusturduğu istemciyi bile Dispose ile serbest bırakmamış ya da using ile kullanmamış ki bu da yeni olduğunu gösterir. Bir gun o hatayla da karşılacak ve GC neden temizlemiyor dediğinde bu çözümu sunarak yardımcı oluruz. İyi forumlar.
 

Geri
Yukarı