Çözüldü C# Textbox'a yazilan liste aktarılırken birleşik oluyor

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

c0juk

Decapat
Katılım
16 Haziran 2022
Mesajlar
2.000
Çözümler
11
Yer
Izmir
Daha fazla  
Sistem Özellikleri
Islemci:AMD Ryzen™5 7600X
Anakart:GIGABYTE B650M DS3H
Ram:XPG 32GB (2x16GB) Lancer Siyah DDR5 6000MHz CL40
Kasa/PSU:XIGMATEK COCKPIT X-POWER 700W 80PLUS
Ekran Karti:ZOTAC GeForce RTX 4070 TWIN EDGE OC
Sivi Sogutma:COOLER MASTER MASTERLIQUID ML240L V2
SSD:CRUCIAL P3 1TB
Cinsiyet
Erkek
Meslek
Ogrenci
10. sinifa yeni basladim ve kendimi okul disinda ilerletiyorum ancak sorunum var.
1694897612462.png

Normalde Portakal yazdiktan sonra elma yazinca alta gecirip birlesik olmamasi lazim, sorun nedir?
 
Son düzenleyen: Moderatör:
Çözüm
Textbox1'de bir alt satıra geçtiğinizde onu ayrı bir satırmış gibi algılamıyor. "Portakal\r\nelma" şeklinde algılıyor. Dolayısıyla siz "Portakal\r\nelma" verisini listeye eklediğinizde birleşik görünüyor.

Split metodu ile ikisini ayırıp tekrar listeye ekleme yapılabilir fakat bu başlangıçta biraz kafa karıştırıcı olacaktır.
Textbox1'de bir alt satıra geçtiğinizde onu ayrı bir satırmış gibi algılamıyor. "Portakal\r\nelma" şeklinde algılıyor. Dolayısıyla siz "Portakal\r\nelma" verisini listeye eklediğinizde birleşik görünüyor.

Split metodu ile ikisini ayırıp tekrar listeye ekleme yapılabilir fakat bu başlangıçta biraz kafa karıştırıcı olacaktır.
 
Çözüm
Textbox1'de bir alt satıra geçtiğinizde onu ayrı bir satırmış gibi algılamıyor. "Portakal\r\nelma" şeklinde algılıyor. Dolayısıyla siz "Portakal\r\nelma" verisini listeye eklediğinizde birleşik görünüyor.

Split metodu ile ikisini ayırıp tekrar listeye ekleme yapılabilir fakat bu başlangıçta biraz kafa karıştırıcı olacaktır.
O zaman kitapta neden oyle gostermis? Gerci ne beklersin ki? bakalim 3 4 gun sonra derste nolucak. Sagolun
 
O zaman kitapta neden oyle gostermis? Gerci ne beklersin ki? bakalim 3 4 gun sonra derste nolucak. Sagolun


Aslında binevi doğru gösteriliyor fakat MultiLine özelliğini açtığınızdan enter yapıp alt satıra geçebiliyorsunuz.


Aşağıda da asıl sorunu çözecek kodu verdim. button1_click void'ine bunu yazarsanız muhtemelen çalışacaktır test etmedim.
Merak ettiğiniz bir şey olursa yeni konu açıp sorabilir veya benim önerim internetten araştırıp kendiniz öğrenmeye çalışabilirsiniz.

Yine de en iyisi izlediğiniz eğitim var ise onunla ilerleyip daha sonradan araştırma yapabilirsiniz. Buradaki kodu anlamak için Array mantığını da bilmeniz gerekiyor.
C#:
if(textBox1.Text.Contains("\r\n")){
ListBox1.Items.AddRange(textBox1.Text.Split(new[] {"\r\n"}, StringSplitOptions.None));
}
else{
ListBox1.Items.Add(textBox1.Text);
}
 
string[] items = Regex.Split(textBox1.Text, "\r\n");
listBox1.Items.AddRange(items);
Bunu deneyebilirsin. Build ederken hata alırsan kendin düzenleyebilirsin.
 
Aslında binevi doğru gösteriliyor fakat MultiLine özelliğini açtığınızdan enter yapıp alt satıra geçebiliyorsunuz.


Aşağıda da asıl sorunu çözecek kodu verdim. button1_click void'ine bunu yazarsanız muhtemelen çalışacaktır test etmedim.
Merak ettiğiniz bir şey olursa yeni konu açıp sorabilir veya benim önerim internetten araştırıp kendiniz öğrenmeye çalışabilirsiniz.
C#:
if(textBox1.Text.Contains("\r\n")){
ListBox1.Items.AddRange(textBox1.Text.Split(new[] {"\r\n"}, StringSplitOptions.None));
}
else{
ListBox1.Items.Add(textBox1.Text);
}
Cok teşekkür ederim. Ancak suan aklim almiyor bunu aklimda tutucam derste cozum ne bakicam onada. İyi geceler dilerim

string[] items = Regex.Split(textBox1.Text, "\r\n");
listBox1.Items.AddRange(items);
Bunu deneyebilirsin. Build ederken hata alırsan kendin düzenleyebilirsin.
Cok sagolun ama anlamıyorum... daha cok yeniyim:(
 
Madem yenisin. Bunu senin için hazırladım. Direk kullanabilirsin. Ama mantığını anlaman gerek. Açıklama da ekledim yanına okulda açıklamasını yaparsın. Hatta bu kodu TextBox un TextChanged olayına da yazabilirsin. Textbox a yazılan yazıyı anlık olarak ListBox a ekler.

C#:
private void button1_Click(object sender, EventArgs e)
{
    // TextBox'taki metni satır satır bölmek için Environment.NewLine kullandık.
    string[] lines = textBox1.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
    listBox1.Items.Clear();

    // Satırları ListBox'a ekledik.
    foreach (string line in lines)
    {
        listBox1.Items.Add(line);
    }
}
 

Dosya Ekleri

  • Ekran görüntüsü 2023-09-17 002607.png
    Ekran görüntüsü 2023-09-17 002607.png
    46,1 KB · Görüntüleme: 17
Şöyle ki, multiline textbox'larda regex ile parse etmenize gerek yok. Daha iyi bir çözüm için:
C#:
var lines = textBox1.Lines;
for(var i = 0; i < lines.Length; i++){
    var line = lines[i];
    listBox1.Items.Add(line);
}

textBox1.Lines burada TextBox'a yazdığınız her satırı string olarak barındıran bir dizi (array) döndürür.

Ayrıca .NET WinForms öldü. Boş yere öğrenmenizi pek önermem. Pratik için belki hoş olabilir ama bu kadar detay bilmenize gerek yok.
 
Madem yenisin. Bunu senin için hazırladım. Direk kullanabilirsin. Ama mantığını anlaman gerek. Açıklama da ekledim yanına okulda açıklamasını yaparsın. Hatta bu kodu TextBox un TextChanged olayına da yazabilirsin. Textbox a yazılan yazıyı anlık olarak ListBox a ekler.

C#:
private void button1_Click(object sender, EventArgs e)
{
    // TextBox'taki metni satır satır bölmek için Environment.NewLine kullandık.
    string[] lines = textBox1.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
    listBox1.Items.Clear();

    // Satırları ListBox'a ekledik.
    foreach (string line in lines)
    {
        listBox1.Items.Add(line);
    }
}
Cok tesekkur ederim. Okulda bu yazdiginizi konusucam hocayla :)

Şöyle ki, multiline textbox'larda regex ile parse etmenize gerek yok. Daha iyi bir çözüm için:
C#:
var lines = textBox1.Lines;
for(var i = 0; i < lines.Length; i++){
    var line = lines[i];
    listBox1.Items.Add(line);
}

textBox1.Lines burada TextBox'a yazdığınız her satırı string olarak barındıran bir dizi (array) döndürür.

Ayrıca .NET WinForms öldü. Boş yere öğrenmenizi pek önermem. Pratik için belki hoş olabilir ama bu kadar detay bilmenize gerek yok.
Hocam bunu gosteriyorlar bize. Oneriniz nedir ekstradan?
 

Geri
Yukarı