Çözüldü C# Richtextbox'da method ile her satırın sonundan ve başından karakter silme

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

sauranex

Hectopat
Katılım
24 Eylül 2020
Mesajlar
643
Makaleler
1
Çözümler
3
Öncelikle merhaba, elimde bir richtextbox var ve bunda 5000 küsür satır var, satır başından "-2", satır sonundan iste "-5" karakter silmek istiyorum tabi bu silinen karakter sayısı değişiklik gösteriyor. Projede kullandığım böyle bir kod var fakat bu kod bloğunu her işlem yaptığımda yazmam lazım bunun yerine "private void" tarzı bir method kullanmak istiyorum, yani methodu çektiğimde sayı belirticem ve ona göre işlem yapıcak. Satır sayısı 5000 ile sınırlı kalmayabilir bu işlem 1.000.000 sayıya kadar çıkabilir bu yüzden StringBuilder'ı BackgroundWorker içinde kullanıyorum. Kısacası istediğim kod, bir method çağırarak satır sonundan ve başından silme işlemi yapacak fakat methodu satır sonu veya satır başı işlemine özel olarak almak ve sayı belirtmek istiyorum. Hobi amaçlı yazılım geliştirdiğim için fazla bilmiyorum, kullandığım kod bloğunu aşağıya bırakıyorum.
[CODE lang="csharp" title="Richtextbox her satır başından 8 karakter silen kod bloğu"] StringBuilder sbdnsmasqfirst = new StringBuilder();
foreach (string s in rtbList.Lines)
{
if (s.Length > 0)
{
sbdnsmasqfirst.AppendLine(s.Substring(8));
}
}
rtbList.Text = sbdnsmasqfirst.ToString();[/CODE]

[CODE lang="csharp" title="Richtextbox her satır sonundan 3 karakter silen kod bloğu"] StringBuilder sbdnsmasqlast = new StringBuilder();
foreach (string s in rtbList.Lines)
{
if (s.Length > 0)
{
sbdnsmasqlast.AppendLine(s.Substring(0, s.Length - 3));
}
}
rtbList.Text = sbdnsmasqlast.ToString();[/CODE]
 
Çözüm
Bunu dener misin?
C#:
private void subs(RichTextBox obj, int start, int end) {
    StringBuilder sbdnsmasqlast = new StringBuilder();
    foreach(string s in rtbList.Lines) {
        if(s.Length > 0) {
            sbdnsmasqlast.AppendLine(end == 0 ? s.Substring(start) : s.Substring(start, s.Length - start - end));
        }
    }
    rtbList.Text = sbdnsmasqlast.ToString();
}
Sorun bence koddan değil de 4, 2 değerlerine göre girdinin en az 6 karakterli olması gerekiyor girdiniz bu koşulu sağlıyor mu?
Malesef bir önceki attığım görseldeki hatayı veriyor. Liste bu şekilde;
1.PNG
 
Bunu dener misin?
C#:
private void subs(RichTextBox obj, int start, int end) {
    StringBuilder sbdnsmasqlast = new StringBuilder();
    foreach(string s in rtbList.Lines) {
        if(s.Length > 0) {
            sbdnsmasqlast.AppendLine(end == 0 ? s.Substring(start) : s.Substring(start, s.Length - start - end));
        }
    }
    rtbList.Text = sbdnsmasqlast.ToString();
}
 
Çözüm
Hocam bu harika kod için çok teşekkür ederim, tam istediğim gibi çalışıyor, beni büyük bir dertten kurtardınız. Methodu backgroundworker içerisine nasıl alacağım bilmiyorum, çünkü işlem yaptığım liste şuan 500 satırlık tabi bu 1.000.000 rakama kadar çıkabilir ileride herhangi bir sorun olsun istemiyorum, methodu nasıl bgw içerisine alabiliriz, kod paylaşabilir misiniz?
 
Hocam bu harika kod için çok teşekkür ederim, tam istediğim gibi çalışıyor, beni büyük bir dertten kurtardınız. Methodu backgroundworker içerisine nasıl alacağım bilmiyorum, çünkü işlem yaptığım liste şuan 500 satırlık tabi bu 1.000.000 rakama kadar çıkabilir ileride herhangi bir sorun olsun istemiyorum, methodu nasıl bgw içerisine alabiliriz, kod paylaşabilir misiniz?
BackroundWorkerı kullandığın sınıfı atar mısın kullandığın yapıya göre field veya constructor önereyim.
 
Eğer BackgroundWorker bu kadarsa start ve end adında 2 field tanımlayıp onları değiştirin methoda göre.
Bu kadar değil checkbox if else, satır silme ve dosya oluşturma kodları var içinde, yani bgw'nin en üst kısmına methodu yerleştiricem devamında 10-15 checbox if else ile satır silip dosya oluşturucam sürekli. Ayrıca field işlevini bilmiyorum, dediğim gibi hobi amaçlı kodluyorum.😌
 
Bu kadar değil checkbox if else, satır silme ve dosya oluşturma kodları var içinde, yani bgw'nin en üst kısmına methodu yerleştiricem devamında 10-15 checbox if else ile satır silip dosya oluşturucam sürekli. Ayrıca field işlevini bilmiyorum, dediğim gibi hobi amaçlı kodluyorum.😌
Tam olarak dediğinizi anlamadım ama bgw içinde subs(RichTextBox, start, end) kullanarak satırları ayarlayabilirsiniz.
 
Tam olarak dediğinizi anlamadım ama bgw içinde subs(RichTextBox, start, end) kullanarak satırları ayarlayabilirsiniz.
subs(RichTextBox, start, end) kodunu bgw içinde kullanıyorum fakat method bgw içinde olmayınca yüksek boyutlu dosyalarda program çökme yapabilir o yüzden methodu içeri almak istiyorum fakat method olduğu için bgw içine alınca hata veriyor. BGW kullanınca sistem kaynağında kendine ayrı bir bölüm ayırıyor böylece programda çökme olmuyor o yüzden methodu içeri almak istedim.
 
subs(RichTextBox, start, end) kodunu bgw içinde kullanıyorum fakat method bgw içinde olmayınca yüksek boyutlu dosyalarda program çökme yapabilir o yüzden methodu içeri almak istiyorum fakat method olduğu için bgw içine alınca hata veriyor. BGW kullanınca sistem kaynağında kendine ayrı bir bölüm ayırıyor böylece programda çökme olmuyor o yüzden methodu içeri almak istedim.
Metoda bgwden erişince yine async çalışması lazım. Aldığınız hata nedir?
 

Yeni konular

Geri
Yukarı