Arama butonu
Bu konudaki kullanıcılar: 1 misafir
18
Cevap
1154
Tıklama
0
Öne Çıkarma
C# da IF şartını dışarıdan girebilir miyiz?
C
12 yıl
Çavuş
Konu Sahibi

Arkadaşlar C# da IF şartını dışarıdan girebilir miyiz? mesela bir textbox'a şartı yazacaz IF'deki şart'ı ona göre değiştirecek..

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



K
12 yıl
Yarbay

Amaci daha detayli yazarsan yardim edebiliriz



< Bu ileti mobil sürüm kullanılarak atıldı >

G
12 yıl
Binbaşı

Vallahi buna neden ihtiyaç duyduğunu çok merak ettim
Sorunun cevabına gelirsek, C# diliyle ilgili bildiğim hiçbir şey yok



< Bu ileti mobil sürüm kullanılarak atıldı >

B
12 yıl
Yüzbaşı

Bu tarz işler için kullanabileceğin kütüphaneler mevcut. Burada bazılarından bahsedilmiş:

http://stackoverflow.com/questions/5029699/c-sharp-convert-string-expression-to-a-boolean-expression


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @collegetunc
W
12 yıl
Binbaşı

İçine yazılacak şartın bir sınırı varsa kendin yorumlayabilirsin, ben bi ara denemiştim ufak bi yorumlayıcı yapmayı gerçekten eğlenceli.



C
12 yıl
Çavuş
Konu Sahibi

dışarıdaki textbox'a ifin şartını kendimiz yazacaz ve bu yazdığımız şarta göre işlem yapacak.. mesala textbox'ın içine a<=20&&b>=30 yazıyorum sonra iki tane text box'tan a ve b değerlerini giricem ona göre işlem yapacak.. karışık gibi ama


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @barisgurler , @Kaygerya , @welrocken
W
12 yıl
Binbaşı

quote:

Orijinalden alıntı: collegetunc

dışarıdaki textbox'a ifin şartını kendimiz yazacaz ve bu yazdığımız şarta göre işlem yapacak.. mesala textbox'ın içine a<=20&&b>=30 yazıyorum sonra iki tane text box'tan a ve b değerlerini giricem ona göre işlem yapacak.. karışık gibi ama

Olay sadece a ve b'den oluşuyorsa çok da zor değil.


Bu mesaja 1 cevap geldi.
C
12 yıl
Çavuş
Konu Sahibi

denemediğim yöntem kalmadı ama olmuyor.


Bu mesaja 1 cevap geldi.
W
12 yıl
Binbaşı

quote:

Orijinalden alıntı: collegetunc

denemediğim yöntem kalmadı ama olmuyor.

Şuan yapıyorum birşeyler, proje dosyasını paylaşırım.


Bu mesaja 1 cevap geldi.
W
12 yıl
Binbaşı

W
12 yıl
Binbaşı

Bu da kodlar;

Form1'e eklenmesi gereken nesneler;
textBox1 -> Şartın yazılacağı textbox
textBox2 -> Değişkenin değerinin girileceği textbox
button1 -> İşlemin uygulanması için basılacak button
listBox1 -> Değişkenleri listeleyen listbox
label1 -> İşlemin sonucunu gösteren label

Form1.cs
using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Islem
{
public partial class Form1 : Form
{

List<string> isaretler = new List<string>() { "==", "!=", "<", ">", "<=", ">=", "&&", "||" };
List<Degisken> degiskenler = new List<Degisken>();
int seciliDegisken = -1;


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
}

private void button1_Click(object sender, EventArgs e)
{
TumSart ts = new TumSart(textBox1.Text, degiskenler);
label1.Text = ts.Result().ToString();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
listBox1.Items.Clear();
degiskenler.Clear();

List<string> parcalar = Ayir(textBox1.Text);
List<string> degiskenIsimleri = new List<string>();

foreach (string item in parcalar)
{
if (!degiskenIsimleri.Contains(item))
{
degiskenIsimleri.Add(item);
}
}

foreach (string degiskenIsmi in degiskenIsimleri)
{
degiskenler.Add(new Degisken("0", degiskenIsmi));
}

degiskenDegeriGoster();

listBoxdaGoster();

}
catch
{
}
}

void degiskenDegeriGoster()
{
if (seciliDegisken >= 0)
{
textBox2.Text = degiskenler[seciliDegisken].Deger;
}
else
{
textBox2.Text = "";
}
}

List<string> degiskenIsimListesi()
{
List<string> dil = new List<string>();
foreach (Degisken item in degiskenler)
{
dil.Add(item.Isim);
}
return dil;
}

public List<string> Ayir(string tumString)
{
string eksiltilenString = tumString;
List<string> res = new List<string>();
List<char> isaretlerc = new List<char>() { '=', '!', '<', '>', '<', '>', '&', '|' };
int sonOperatorPozisyonu = 0;
int sonOperatorUzunlugu = 0;
for (int i = 0; i < tumString.Length; i++)
{
for (int j = 0; j < isaretlerc.Count; j++)
{
string parca = Parca(tumString, isaretlerc[j], ref sonOperatorPozisyonu, ref sonOperatorUzunlugu, i, j);
if (parca != "")
{
res.Add(parca);
eksiltilenString = eksiltilenString.Substring(eksiltilenString.IndexOf(isaretler[j]) + isaretler[j].Length, eksiltilenString.Length - (eksiltilenString.IndexOf(isaretler[j]) + isaretler[j].Length));
}
}
}
res.Add(eksiltilenString);//Son parça
return res;
}

string Parca(string tumString, char operatorKarakter, ref int sonOperatorIndexi, ref int sonOperatorUzunlugu, int indexTumStringFor, int karakterSira)
{

string parca = "";
if (tumString[indexTumStringFor] == operatorKarakter)
{
bool b = (tumString.Substring(indexTumStringFor, isaretler[karakterSira].Length) == isaretler[karakterSira]);
if (b)//İşaret tamamen doğru mu?
{
//TümŞartta yapılanların benzerleri
if (sonOperatorIndexi > 0)
{
parca = tumString.Substring(sonOperatorIndexi + sonOperatorUzunlugu, indexTumStringFor - (sonOperatorIndexi + sonOperatorUzunlugu));//Bir önceki operatör ile şuan bulunan operatör arası.
}
else
{
parca = tumString.Substring(0, indexTumStringFor);//Baştan buraya kadar.
}
sonOperatorIndexi = indexTumStringFor;
sonOperatorUzunlugu = isaretler[karakterSira].Length;
}
}
return parca;
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
seciliDegisken = listBox1.SelectedIndex;
degiskenDegeriGoster();
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
if (seciliDegisken >= 0)
{
degiskenler[seciliDegisken].Deger = textBox2.Text;
}
listBoxdaGoster();
}

void listBoxdaGoster()
{
listBox1.Items.Clear();
foreach (Degisken degisken in degiskenler)
{
listBox1.Items.Add(degisken.Isim + " = " + degisken.Deger);
}
}

}
}



Degisken.cs
using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Islem
{
class Degisken
{

private string isim = "";//Değişkenin gözüken ismi

private Type tip;//Değişkenin tipi

private string deger = "";//Değişkenin değeri



public string Isim { get { return this.isim; } set { this.isim = value; } }

public Type Tip { get { return this.tip; } set { this.tip = value; } }

public string Deger { get { return this.deger; } set { this.deger = value; TurBelirle(); } }



public object SadeDeger()
{
object o = deger;
if (tip == typeof(int))
{
o = Convert.ToInt32(deger);
}
else if (tip == typeof(double))
{
o = Convert.ToDouble(deger);
}
return deger;
}



public Degisken(string Deger, string Isim)
{
this.isim = Isim;
this.deger = Deger;
TurBelirle();
}

void TurBelirle()
{
//Sayı için uygun ifadeler;
List<char> sayiIcinUygun = new List<char>();
for (int i = 0; i < 9; i++)
{
sayiIcinUygun.Add(Convert.ToChar(i.ToString()));
}
sayiIcinUygun.Add('.');
bool sayi = true;
bool noktali = false;
for (int i = 0; i < deger.Length; i++)
{
char c = deger[i];
if (!sayiIcinUygun.Contains(c))
{
sayi = false;
break;
}
else
{
if (c == '.')
{
noktali = true;
}
}
}
tip = typeof(string);
if (sayi)
{
tip = typeof(int);
if (noktali)
{
tip = typeof(double);
}
}
}

}
}



Islem.cs
using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Islem
{
class Islem
{

private string sart = "";

private Degisken[] degiskenler = new Degisken[2];



public string Sart { get { return this.sart; } set { this.sart = value; } }



public bool Result()
{
bool b = false;
Type t1 = degiskenler[0].Tip;
Type t2 = degiskenler[1].Tip;
object sd1 = degiskenler[0].SadeDeger();
object sd2 = degiskenler[1].SadeDeger();
if (sart == "==")
{
if (t1 == t2 && sd1.Equals(sd2))
{
b = true;
}
}
else if (sart == "!=")
{
if (t1 != t2 || !(sd1.Equals(sd2)))
{
b = true;
}
}
else if (sart == "<")
{
if (Convert.ToDouble(sd1) < Convert.ToDouble(sd2))
{
b = true;
}
}
else if (sart == ">")
{
if (Convert.ToDouble(sd1) > Convert.ToDouble(sd2))
{
b = true;
}
}
else if (sart == "<=")
{
if (Convert.ToDouble(sd1) <= Convert.ToDouble(sd2))
{
b = true;
}
}
else if (sart == ">=")
{
if (Convert.ToDouble(sd1) >= Convert.ToDouble(sd2))
{
b = true;
}
}
else if (sart == "true")
{
b = true;
}
return b;
}



public Islem(string islemString, List<Degisken> degerler)
{
string[] islemler = new string[] { "==", "!=", "<", ">", "<=", ">=" };
for (int i = 0; i < islemler.Length; i++)
{
if (islemString.Contains(islemler[i]))
{
sart = islemler[i];
}
}
if (sart != "")
{
int indexSartIsareti = islemString.IndexOf(sart);
string degisken1 = islemString.Substring(0, indexSartIsareti);//ŞART İŞARETİNİN ÖNCESİNİ AL
string degisken2 = islemString.Substring(indexSartIsareti + sart.Length, islemString.Length - indexSartIsareti - sart.Length);//ŞART İŞARETİNİN SONRASIN AL
foreach (Degisken item in degerler)
{
if (degisken1 == item.Isim)//Formdan gönderilen değişkenlerden ismi STRING'DE OLAN ise
{
degiskenler[0] = item;
}
}
foreach (Degisken item in degerler)
{
if (degisken2 == item.Isim)//Formdan gönderilen değişkenlerden ismi STRING'DE OLAN ise
{
degiskenler[1] = item;
}
}
}
else
{
if (islemString == "true")
{
sart = "true";
}
else if (islemString == "false")
{
sart = "false";
}
}
}

}
}



TumSart.cs
using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Islem
{
class TumSart
{

private List<string> ops = new List<string>();

private List<Islem> islemler = new List<Islem>();



public bool Result()
{
bool b = false;
List<bool> sonuclar = new List<bool>();
foreach (Islem islem in islemler)
{
sonuclar.Add(islem.Result());
}
b = res(sonuclar);
return b;
}

int ax = 0;
bool res(List<bool> sonuclar)
{
List<bool> sonclar = sonuclar;
bool b = false;
while (sonclar.Count >= 2 && ax < ops.Count)
{
bool birinciIleIkinci = false;
if (ops[ax] == "&&")
{
birinciIleIkinci = sonclar[0] && sonclar[1];
}
else if (ops[ax] == "||")
{
birinciIleIkinci = sonclar[0] || sonclar[1];
}
ax++;
sonclar.RemoveAt(0);
sonclar[0] = birinciIleIkinci;
}
b = sonclar[0];
return b;
}



public TumSart(string butunSartStringi, List<Degisken> degerler)
{
string[] operators = new string[] { "&&", "||" };//şartlar arasında mümkün olan iki tane operatör var
int sonOperatorPozisyonu = 0;//Stringlerle oynarken lazım olacak bir değişken, en son kullanılan operatörün pozisyonu
for (int i = 0; i < butunSartStringi.Length; i++)//textboxa girilen bütün stringi karakter karakter inceliyoruz
{
if (butunSartStringi[i] == '&')//Eğer i'ninci harf '&' ise
{
if (sonOperatorPozisyonu > 0)//Ve daha önce işlem yapıldıysa ((a<b||c>d&&z>x) gibi bir işlemde)
{
string islemStr = butunSartStringi.Substring(sonOperatorPozisyonu + 2, i - (sonOperatorPozisyonu + 2));//Bir önceki operatör ile şuan bulunan operatör arası.
islemler.Add(new Islem(islemStr, degerler));//Elde edilen stringden bir işlem türet (a<b vs.)
//#1
}
else//Daha önce işlem yapılmamış (mesela a<b&&a>b||a>d)
{
string islemStr = butunSartStringi.Substring(0, i);//Baştan i'ye kadar.
islemler.Add(new Islem(islemStr, degerler));//İşlemi oluşturma (a<b)
//#1
}
//#1
ops.Add("&&");
sonOperatorPozisyonu = i;
i++;//"&&" iki harfli olduğu için TÜMSTRİNG'de bir sonraki karakteri atlıyoruz.
}
if (butunSartStringi[i] == '|')
{
if (sonOperatorPozisyonu > 0)
{
string islemStr = butunSartStringi.Substring(sonOperatorPozisyonu + 2, i - (sonOperatorPozisyonu + 2));//Bir önceki operatör ile şuan bulunan operatör arası.
islemler.Add(new Islem(islemStr, degerler));
//#2
}
else
{
string islemStr = butunSartStringi.Substring(0, i);//Baştan buraya kadar.
islemler.Add(new Islem(islemStr, degerler));
//#2
}
//#2
ops.Add("||");
sonOperatorPozisyonu = i;
i++;
}
}
//Sondaki işlem;
//Sondan geri doğru ilk & veya | görülen yere kadar bir işlem oluştur.
for (int i = butunSartStringi.Length - 1; i >= 0; i--)
{
if (butunSartStringi[i] == '&' || butunSartStringi[i] == '|')
{
string islemStr = butunSartStringi.Substring(i + 1, butunSartStringi.Length - (i + 1));
islemler.Add(new Islem(islemStr, degerler));
break;
}
}
//Hiç && veya || yoksa;
if (!butunSartStringi.Contains("&&") && !butunSartStringi.Contains("||"))
{
islemler.Add(new Islem(butunSartStringi, degerler));
}
}

}
}


Bu mesaja 1 cevap geldi.
C
12 yıl
Çavuş
Konu Sahibi

welrocken hocam teşekkür ederim yardımın için inceliyorum inceledikten sonra sonucu haber veririm sana




Bu mesajda bahsedilenler: @welrocken
S
12 yıl
Er

Merhaba welrocken teşekkür ederim paylaşımın için. Hocam ben bu kodları yazdım fakat " EventArgs e " de hata veriyor. Sıkıntı ne olabilir.
HATA: Error 1 The type or namespace name 'EventArgs' could not be found (are you missing a using directive or an assembly reference?)


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
12 yıl
Binbaşı

quote:

Orijinalden alıntı: srhtylcn

Merhaba welrocken teşekkür ederim paylaşımın için. Hocam ben bu kodları yazdım fakat " EventArgs e " de hata veriyor. Sıkıntı ne olabilir.
HATA: Error 1 The type or namespace name 'EventArgs' could not be found (are you missing a using directive or an assembly reference?)

5 tane EventArgs e var, hangisinde veriyor?


Bu mesaja 1 cevap geldi.
S
12 yıl
Er

hepsinde :)


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
S
12 yıl
Er

şimdi yeni bir projede yaptım bu sefer de başka bir hata verdi. herhalde diğer formları görmüyor..HATA ŞU :

Error 1 Missing partial modifier on declaration of type 'Islem.Degisken'; another partial declaration of this type exists D:\DERSLER\C# Çalışma\Islem\Islem\Degisken.cs 8 11 Islem


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @srhtylcn
W
12 yıl
Binbaşı

quote:

Orijinalden alıntı: srhtylcn

şimdi yeni bir projede yaptım bu sefer de başka bir hata verdi. herhalde diğer formları görmüyor..HATA ŞU :

Error 1 Missing partial modifier on declaration of type 'Islem.Degisken'; another partial declaration of this type exists D:\DERSLER\C# Çalışma\Islem\Islem\Degisken.cs 8 11 Islem


Tahminimce benim oluşturduğum nesneler ve o nesnelere atadığım görevleri aynı şekilde yapmadın. Ben sana direk projeyi atayım:
http://rapidshare.com/share/040A164ED4D18D1284FA31148CB90FFC


Bu mesaja 1 cevap geldi.
S
12 yıl
Er

Çook teşekkür ederim:)


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @welrocken
W
12 yıl
Binbaşı

@srhtylcn 'ın farkettiği bir bug giderildi, sağolsun.
Yeni proje;
http://rapidshare.com/share/46377907004E9CAFC42CD796F40A0E11





< Bu mesaj bu kişi tarafından değiştirildi welrocken -- 3 Ocak 2014; 13:49:38 >

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.