1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش کنترل های سفارشی در ASP.Net

شروع موضوع توسط AftabGardoon ‏8/2/19 در انجمن ASP.NET

Tags:
  1. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    کد فوق به صورت خودکار برای custom control ایجاد می شود. event ها (رخدادها) و توابع را می توان به کلاس custom control اضافه کرد.
     
  2. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    مثال:

    در این بخش همان custom control مثال قبلی (SeverControl1) را بسط می دهیم. متدی به نام checkpalindrome به آن اضافه می کنیم که قابلیت بررسی و پیدا کردن palindrome ها (واروخوانه( را به کنترل می دهد.


    Palindrome واژه، جمله، عدد یا هر چیز دیگری گفته می‌شود که خواندن آن از چپ به راست یا از راست به چپ کاملاً یکسان باشد. به عنوان نمونه می توان واژه های Malayalam،madam ، Sarasرا نام برد.
     
  3. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    برای این منظور لازم است کد custom control را همانگونه که زیر مشاهده می کنید، بسط دهید:

    کد:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    namespace CustomControls
    {
        [DefaultProperty("Text")]
        [ToolboxData("< {0}:ServerControl1 runat=server >< /{0}:ServerControl1   >")]
        public class ServerControl1 : WebControl
        {
            [Bindable(true)]
            [Category("Appearance")]
            [DefaultValue("")]
            [Localizable(true)]
            public string Text
            {
                get
                {
                    String s = (String)ViewState["Text"];
                    return ((s == null) ? "[" + this.ID + "]" : s);
                }
                set
                {
                    ViewState["Text"] = value;
                }
            }
            protected override void RenderContents(HtmlTextWriter output)
            {
                if (this.checkpanlindrome())
                {
                    output.Write("This is a palindrome: < br / >");
                    output.Write("< FONT size=5 color=Blue >");
                    output.Write("< B >");
                    output.Write(Text);
                    output.Write("< /B >");
                    output.Write("< /FONT >");
                }
                else
                {
                    output.Write("This is not a palindrome: < br / >");
                    output.Write("< FONT size=5 color=red >");
                    output.Write("< B >");
                    output.Write(Text);
                    output.Write("< /B >");
                    output.Write("< /FONT >");
                }
            }
            protected bool checkpanlindrome()
            {
                if (this.Text != null)
                {
                    String str = this.Text;
                    String strtoupper = Text.ToUpper();
                    char[] rev = strtoupper.ToCharArray();
                    Array.Reverse(rev);
                    String strrev = new String(rev);
                    if (strtoupper == strrev)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }
        }
    }
     
  4. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    هنگامی که کد کنترل خود را اصلاح می کنید، باید solution را با کلیک روی Build --> Build Solution بسازید تا از این طریق تغییرات وارد آمده در پروژه نشان داده شوند. حال یک کنترل textbox و button control به صفحه اضافه کنید تا کاربر بتواند متن وارد کند. زمانی که کاربر روی دکمه کلیک می کند متن ورودی برای یافتن Palindrome کاملاً بررسی می شود.

    کد:
    < form id="form1" runat="server" >
    < div >
    Enter a word:
    < br / >
    < asp:TextBox ID="TextBox1" runat="server" style="width:198px" > < /asp:TextBox >
    < br / > < br / >
    < asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Check Palindrome" style="width:132px" / >
    < br / > < br / >
    < ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" / >
    < /div >
    < /form >
     
  5. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    Click event handler کنترل دکمه، متن را از کنترل textbox کپی کرده و آن را در خاصیت (property) custom control می ریزد.

    کد:
    protected void Button1_Click(object sender, EventArgs e)
            {
                this.ServerControl11.Text = this.TextBox1.Text;
            }
     
  6. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    پس از اجرا، کنترل مورد نظر palindrome ها را پیدا کرده و بررسی می کند.


    [​IMG]
    به نکات زیر توجه کنید:

    پس از اینکه ارجاع را به custom control اضافه می کنید، این custom control (کنترل سفارشی) بلافاصله به toolbox اضافه شده و شما می توانید آن را مانند هر کنترل دیگری به طور مستقیم مورد استفاده قرار بدید.


    [​IMG]
    در اینجا متد RenderContents کلاس custom control بازنویسی (override) شده و شما می توانید متدها و رخدادهای خود را به آن اضافه کنید.


    متد RenderContents یک پارامتر از نوع HtmlTextWriter می گیرد که وظیفه ی اجرا و نمایش / rendering (بر روی مرورگر ) را بر عهده دارد.