کار با رشته ها در #C قسمت سوم

کار با رشته ها در #C قسمت سوم

به دست آوردن تعداد خطوط متن در یک textbox

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); const uint EM_GETLINECOUNT = 0xBA; IntPtr wp=IntPtr.Zero; IntPtr lp=IntPtr.Zero;

طریقه استفاده

IntPtr lines = SendMessage(textBox1.Handle, EM_GETLINECOUNT,wp,lp); MessageBox.Show(lines.ToInt32().ToString());

چرا و کی باید از کلاس StringBuilder به جای string استفاده کنيم ؟

آبجکت های string در دات نت immutable (غيرقابل تغيير ) هستند به این معنا که پس از مقدار گرفتن، دیگر قابل تغيير نیستند. به مثال زیر دقت کنيد:

string temp = "a"; temp = temp + "b"; temp += "c"; temp += "d";

در این مثال ابتدا یک آبجکت از نوع string مي‌سازید، اما در خطوط بعدی با هر بار تغيير مقدار آن؛ آبجکت‌های قدیمی فراموش و یک آبجکت جدید از نوع – string با مقدار جدید - ساخته مي‌شود.

به این ترتيب می‌توان انتظار داشت که کد زیر چه سربار وحشتناکی روی منابع سيستم مي‌تواند داشته باشد:

string s2 = new String('x', Int32.Parse(args[0])); int loops = Int32.Parse(args[1]); for (int j = 0; j < 10000000; j++) { string s = ""; for (int i = loops; i > 0; --i) s += s2; }

بصورت کلی در حالتي که اعمال تغييرات زیاد روی رشته‌ها نياز باشد بهتر است آبجکتی از کلاس StringBuilder ساخته و با خاصيت Append آن کار کنيم.

مثال - پياده سازی همان کد قبلی:

string s2 = new String('x', Int32.Parse(args[0])); int loops = Int32.Parse(args[1]); for (int j = 0; j < 10000000; j++) { StringBuilder sb = new StringBuilder(); for (int i = loops; i > 0; --i) sb.Append(s2); sb.ToString(); }

آغاز کار با کلاس Clipboard و دادن و گرفتن یک رشته متنی به/از آن

//clear clipboard Clipboard.Clear(); //Set Text to clipboard if (!string.IsNullOrEmpty(textBox1.Text)) Clipboard.SetText(textBox1.Text); //Get text from clipboard MessageBox.Show(Clipboard.GetText());

نحوه استفاده کاراکترهای خاص (مثلا علامت کپی رایت)

می‌توانين با قرار دادن کد هگزای مربوط کاراکتر مورد نظر خود پس از " X\" آن کاراکتر را در هر متغير رشته‌ای نشان دهيد. به عنوان مثال کد هگز مربوط به کاراکتر کپی رایت A9 می‌باشد. پس اگر شما دستوری مانند زیر در برانامه داشته باشيد

MessageBox.Show("pix3l.ir");

بدست آوردن ميزان عددی طول رشته ی درون یک TextBox

Graphics txtGraphics = this.textBox1.CreateGraphics(); float width = txtGraphics.MeasureString(textBox1.Text, textBox1.Font).Width; this.Text = width.ToString(); txtGraphics.Dispose();

پاک کردن خاصيت Text گروهی از کنترل‌های مشخص

کاربرد : زمانی که نمي‌توان از یک الگوریتم بازگشتی استفاده کرد؛ برای مثال کنترل‌ها در Containerهای متفاوتی هستند و تنها تعداد خاصی از آنها باید Clear شوند.

public void ClearControls(params Control[] ctls) { foreach (Control ct in ctls) ct.Text = ""; } private void button1_Click(object sender, EventArgs e) { ClearControls(textBox1, textBox2, comboBox1); }

جایگزین کردن یک رشته درون متن یک textbox به روش اندیس دهی

با فشار دادن دکمه،زیر رشته ی موجود در تکس باکس که از اندیس 12 شروع می شود با *** جایگزین می شود

privatevoid button1_Click(object sender, EventArgs e) { textbox1.SelectionStart = 0; textbox1.SelectionLength = textbox1.Text.Length; textbox1.Text=textbox1.SelectedText.Insert(12, "***"); }



نظرات کاربران



عبارت امنیتی : حاصل 2 × 3 می شود :
متن پیام :