Çözüldü C# Kodlama hatası

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

kodlayamadikabi

Femtopat
Katılım
28 Ekim 2020
Mesajlar
38
Merhaba arkadaşlar, kodlarım aşağıdaki gibi görünürde bir hata yok. Çalıştırdığım zaman ad soyad veya diğer kısımları boş bırakıyorum ve hata veriyor nasıl düzeltebilirim. Hatam tam olarak nerde?

Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string[] dersler = { "NESNE TABANLI PROGRAMLAMA", "GÖRSEL PROGRAMLAMA", "YAZILIM MİMARİLERİ", "MULTİMEDYA UYGULAMALARI", "BİLGİSAYAR DONANIMI" };
comboBox1.Items.AddRange(dersler);
}
Int32 vize;
Int32 final;
DialogResult kayit;
private void button1_Click(object sender, EventArgs e)
{

if (textBox1.Text == "")
{
MessageBox.Show("LÜTFEN ADINIZI GİRİNİZ ! ");
textBox1.Focus();
textBox1.BackColor = Color.Yellow;
}

if (textBox2.Text == "")
{
MessageBox.Show("LÜTFEN SOYADINIZI GİRİNİZ ! ");
textBox2.Focus();
textBox2.BackColor = Color.Yellow;
}

if (comboBox1.SelectedIndex == -1)
{
MessageBox.Show("LÜTFEN DERS SEÇİMİ YAPINIZ ! ");
}

vize = Convert.ToInt32(textBox3.Text);
final = Convert.ToInt32(textBox4.Text);
Int32 ort = Convert.ToInt32(vize * 0.4 + final * 0.6);

if (textBox3.Text == "")
{
MessageBox.Show("LÜTFEN VİZE NOTUNUZU GİRİNİZ ! ");
textBox3.Focus();
textBox3.BackColor = Color.Yellow;
}


if (textBox4.Text == "")
{
MessageBox.Show("LÜTFEN FİNAL NOTUNUZU GİRİNİZ ! ");
textBox4.Focus();
textBox4.BackColor = Color.Yellow;
}



if (vize+final < 0 || vize+final > 100)
{
MessageBox.Show("VİZE VEYA FİNAL NOTUNUZU YANLIŞ GİRDİNİZ!! \n LÜTFEN 0-100 ARASINDA BİR DEĞER GİRİNİZ!");
textBox3.Clear();
textBox4.Clear();
textBox3.Focus();
}
else
{
label6.Text = "ORTALAMA = " + ort;
}


kayit = MessageBox.Show(textBox1.Text + " " + textBox2.Text + " İSİMLİ ÖĞRENCİNİN BİLGİLERİ KAYDEDİLSİN Mİ ?", "KAYIT",
MessageBoxButtons.YesNo);

if (kayit == DialogResult.Yes)
{

StreamWriter yazdir;
yazdir = File.AppendText("bilgiler.txt");
yazdir.Write(textBox1.Text + " ");
yazdir.Write(textBox2.Text + " ");
yazdir.Write(comboBox1.SelectedItem + " ");
yazdir.Write(textBox3.Text + " ");
yazdir.Write(textBox4.Text + " ");
yazdir.WriteLine(label6.Text);

yazdir.Close();
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
label6.Text = "";
comboBox1.SelectedItem =null;
}
else
{
MessageBox.Show("KAYIT İŞLEMİNDEN VAZGEÇİLDİ");
}

}


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar > 65 || e.KeyChar < 90 && e.KeyChar == 8)
{
e.Handled = false;
}
else
{
e.Handled = true;
}


if (e.KeyChar == 13)
textBox2.Focus();
}

private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar > 65 || e.KeyChar < 90 && e.KeyChar == 8)
{
e.Handled = false;
}
else
{
e.Handled = true;
}

if (e.KeyChar == 13)
comboBox1.Focus();
}

private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
textBox3.Focus();
}

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{

if (e.KeyChar >= 45 && e.KeyChar <= 57 || e.KeyChar == 8)
{
e.Handled = false;
}
else
{
e.Handled = true;
}

if (e.KeyChar == 13)
textBox4.Focus();
}

private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= 45 && e.KeyChar <= 57 || e.KeyChar == 8)
{
e.Handled = false;
}
else
{
e.Handled = true;
}

if (e.KeyChar == 13)
button1.Focus();
}

private void textBox3_TextChanged(object sender, EventArgs e)
{

}

private void textBox4_TextChanged(object sender, EventArgs e)
{

}


}
}
 

Dosya Ekleri

  • form.png
    form.png
    3,9 KB · Görüntüleme: 200
Son düzenleyen: Moderatör:
Çözüm
Textler boşken elbette hata verecektir, hatalı olduğunuz kısım şu;

Textbox'ların kontrolünü formun load yordamında yapıyorsunuz. Load yordamı sadece form yüklenirken bir kere çalışır. Devamında textboxu boşaltır ya da uyarıyı dikkate almadan boş geçerseniz yine boş olan bir değeri atamaya çalışırsınız. Değer atamalarını kontrol bloklarının altına yapmanız gerekiyor.
Şöyle ki, butona bastığınızda kaydediyorsa eğer değerleri kontrolleri de oraya alın.
Bu size şunu kazandırır, kontrolü form açılışında yapmak yerine kontrolü kayıt yaparken sağlarsınız. Böylelikle kontrol blokları bir sefer değil, her kayıt esnasında çalışarak gerçek bir kontrol sağlar.

  1. TextBox kontrollerini, butonun click yordamı altında yapın, click yordamı altında kontrolleri sağladıktan sonra değer atamalarını yapın. Yani textbox boş değil ise ilgili texboxtaki veriyi ilgili değişkene atayın.
  2. Kontrolleri bir metod içerisinde tanımlayıp metodu farklı yerlerde farklı işlemlerde tekrar tekrar çağırabilirsiniz, metod tanımlaması yapıp metodu butonun click yordamında çağırın.
  3. Dönüştürme metodunu değiştirin, direk olarak dönüştürme kodu kullanmak her zaman çalışmaz, TryParse metodunu araştırın ve o şekilde dönüşüm yapın, hataları düzeltecektir.
Eğer sorunu hala çözemezseniz projeyi yükleyin biz bakalım ya da benimle muhammetoguzhanaydogdu@gmail.com mail adresimden iletişime geçin.
Ben textbox sorgulama kısmını daha farklı şekilde yapmıştım fakat burada da herhangi bir eksik göremedim.

Çalıştırdığım zaman denemek amaçlı boş bırakıyorum.
Vize = convert. Toınt32(textbox3.text);
Final = convert. Toınt32(textbox4.text);
Bu kısımda hata veriyor ama tam anlamadım.
 
Son düzenleyen: Moderatör:

Dosya Ekleri

  • Ekran görüntüsü 2020-11-01 175844.png
    Ekran görüntüsü 2020-11-01 175844.png
    32,1 KB · Görüntüleme: 117
  • Ekran görüntüsü 2020-11-01 175844.png
    Ekran görüntüsü 2020-11-01 175844.png
    32,1 KB · Görüntüleme: 109
Son düzenleyen: Moderatör:
Convert metodu yerine
Kod:
Int32.Parse(TextBox.Text)
şeklinde dene. String olarak yazılmış sayıları int olarak göstermek için bu kullanılır.
Ayrıntısı için:


Boş kalınca hata veriyor demişsin. Kod çok karışık olduğu için okumadım. Fakat textbox boşsa önce if kontrolüyle hata verdirip ondan sonra stringten sayıya çevirme kodunu yaz. Böylece text boşken parse veya convert metotları çalışmayacak.
 
Convert metodu yerine
Kod:
Int32.Parse(TextBox.Text)
şeklinde dene. String olarak yazılmış sayıları int olarak göstermek için bu kullanılır.
Ayrıntısı için:

Boş kalınca hata veriyor demişsin. Kod çok karışık olduğu için okumadım. Fakat textbox boşsa önce if kontrolüyle hata verdirip ondan sonra stringten sayıya çevirme kodunu yaz. Böylece text boşken parse veya convert metotları çalışmayacak.

Bu sefer de böyle bir hata verdi.
 

Dosya Ekleri

  • a.png
    a.png
    6,4 KB · Görüntüleme: 106
Son düzenleyen: Moderatör:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı