نمایش نتایج 1 تا 19 از 19

نام تاپیک: اضافه كردن چند كليد با حلقه for

  1. #1

    اضافه كردن چند كليد با حلقه for

    من با حلقه for ميخوام به برنامه كنترل اضافه كنم اما فقط يه دونه اضافه ميشه.چرا؟[

    for (int i=1; i <5; i++)
    {Button page = new Button();
    page.Location = new System.Drawing.Point(15, 47);
    this.Controls.Add(page);

  2. #2

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط 8411172410 مشاهده تاپیک
    من با حلقه for میخوام به برنامه کنترل اضافه کنم اما فقط یه دونه اضافه میشه.چرا؟[

    for (int i=1; i <5; i++)
    {Button page = new Button();
    page.Location = new System.Drawing.Point(15, 47);
    this.Controls.Add(page);
    سلام.
    خیر. 4 تا اضافه میشه، اما چون همشون رو در یک Location قرار میدید، متوجه این مساله نمیشید (در واقع کلیدها رو دارید روی هم قرار میدید).

    موفق باشید.

    پاورقی: اگر این button هستش، چرا اسم متغیر رو گذاشتید page؟ میخواهید برنامه نویس بعدی رو گمراه کنید؟

  3. #3

    نقل قول: اضافه كردن چند كليد با حلقه for

    به تعدادی که میخوای اضافه میشه اما خاصیت location رو تنظیم نمیکنی
    همش روی هم می افته

  4. #4

    نقل قول: اضافه کردن چند کلید با حلقه for

    سلام.
    این بار چندم هستش که این اتفاق میفته، میخواستم بدونم پاسخ شما (slashslash2009 و saed2006) چه چیز جدیدی به پاسخ اول در Thread اضافه کرده؟

    موفق باشید.

  5. #5

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط mehdi.mousavi مشاهده تاپیک
    سلام.
    این بار چندم هستش که این اتفاق میفته، میخواستم بدونم پاسخ شما (slashslash2009 و saed2006) چه چیز جدیدی به پاسخ اول در Thread اضافه کرده؟

    موفق باشید.
    اگر کمی دقت کرده بودید می دیدید که اختلاف زمانی ارسال پست من با شما تقریبا دو دقیقه هست
    به عبارتی هنگامی که من پستم رو تایپ میکردم شما دکمه ارسال رو زدین
    این چیزا زیاد مهم نیست سعی کنید به چیزای مهمتر فکر کنید
    موفق باشید

  6. #6

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط saed2006 مشاهده تاپیک
    اگر کمی دقت کرده بودید می دیدید که اختلاف زمانی ارسال پست من با شما تقریبا دو دقیقه هست به عبارتی هنگامی که من پستم رو تایپ میکردم شما دکمه ارسال رو زدین سعی کنید به چیزای مهمتر فکر کنید موفق باشید
    بارها همین اتفاق برای من افتاده، و وقتی دیدم پست قبلی جواب سوال رو داده، پست خودم رو (که چیزی افزون بر پاسخ اولیه نداشته) حذف کرده ام. من برای مسائل اخلاقی اینجا نیستم، اما هر از گاهی باید برخی مطالب رو گوشزد کرد.

  7. #7
    کاربر دائمی آواتار Saeed.Masoumi
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    نامعلوم
    پست
    539

    نقل قول: اضافه کردن چند کلید با حلقه for

    سلام
    آقای موسوی یک سوال.
    آیا بهتر نیست در هنگام ایجاد باتن ها خاصیت Name آنها را هم مقداری دهی کنند؟
    B.Name = "button" + i.ToString();

  8. #8

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط سعید معصومی مشاهده تاپیک
    سلام آقای موسوی یک سوال. آیا بهتر نیست در هنگام ایجاد باتن ها خاصیت Name آنها را هم مقداری دهی کنند؟
    سلام.
    اهمیتی نداره... مگه قراره استفاده خاصی از Name اون کنترل کنید؟ قاعدتا خیر! Reference به اون Object و Event هایی که اون Object میتونه Fire کنه هستش که باید برای شما اهمیت داشته باشه.

    البته، من هرگز خودم به این نیاز نرسیده ام که بخوام توی یک Loop، مشتی Button ایجاد کنم و اونها رو روی صفحه قرار بدم. عموما چنین نیازهایی رو باید هشدار باشی برای عدم صحیح طراحی یک کنترل تلقی کرد. گهگاه، من از این جور کدها میبینم که عموما در اونها، برنامه نویس جای اینکه بشینه یک کنترل خاصی رو خودش پیاده سازی کنه (با استفاده از Building Block های Base)، به اشتباه اونو یک Composite Control قلمداد میکنه و بخاطر همین انتخاب نادرست، بعدا انواع و اقسام سوالات براش پیش میاد که هر کدوم رو با یک پاسخ نادرست تر جواب میده و در نهایت یه Spaghetti Code تحویل جامعه میده.

    موفق باشید.

  9. #9

    نقل قول: اضافه كردن چند كليد با حلقه for

    خاصیت name نیاز نیست اما خاصیت text باید مقدار دهی بشه حتما.
    چه طوری برای هر کلید یک رویداد click درست میکنی

  10. #10
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط slashslash2009 مشاهده تاپیک
    خاصیت name نیاز نیست اما خاصیت text باید مقدار دهی بشه حتما.
    چه طوری برای هر کلید یک رویداد click درست میکنی
    من توی برنامه های خودم این کارو با تگ و دلگیت انجام میدم.

  11. #11
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    Angry نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط mehdi.mousavi مشاهده تاپیک
    سلام.
    اهمیتی نداره... مگه قراره استفاده خاصی از Name اون کنترل کنید؟ قاعدتا خیر! Reference به اون Object و Event هایی که اون Object میتونه Fire کنه هستش که باید برای شما اهمیت داشته باشه.

    البته، من هرگز خودم به این نیاز نرسیده ام که بخوام توی یک Loop، مشتی Button ایجاد کنم و اونها رو روی صفحه قرار بدم. عموما چنین نیازهایی رو باید هشدار باشی برای عدم صحیح طراحی یک کنترل تلقی کرد. گهگاه، من از این جور کدها میبینم که عموما در اونها، برنامه نویس جای اینکه بشینه یک کنترل خاصی رو خودش پیاده سازی کنه (با استفاده از Building Block های Base)، به اشتباه اونو یک Composite Control قلمداد میکنه و بخاطر همین انتخاب نادرست، بعدا انواع و اقسام سوالات براش پیش میاد که هر کدوم رو با یک پاسخ نادرست تر جواب میده و در نهایت یه Spaghetti Code تحویل جامعه میده.

    موفق باشید.
    کاملا" مخالفم.
    برنامه ی من opensource نیست ولی اسپاگتی ک د هم نیست.
    یک فرم با کلی امکانات:
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    namespace Esfand.Gozareshat.List_Masir
    {
    public partial class Form_Print : System.Windows.Forms.Form, Esfand.ProfileManagement.FormEx
    {
    System.Collections.Generic.List<Button> Buttons;
    Button CButton;
    public Form_Print()
    {
    InitializeComponent();
    dataGridView1.AutoGenerateColumns = false;
    Buttons = new System.Collections.Generic.List<Button>();
    combo1.DisplayMember = "Name";
    combo1.ValueMember = "Code";
    combo1.DataSource = Esfand.Data.DataClasses.Masir.GetSharedData();
    Buttons = new System.Collections.Generic.List<Button>();
    if (flowLayoutPanel1.Controls.Count > 2) flowLayoutPanel1.Controls.RemoveAt(2);
    }
    private void combo1_SelectedIndexChanged(object sender, EventArgs e) { if (combo1.SelectedIndex != -1) AddButton(combo1.SelectedValue.ToString()); }
    private void txtbox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { AddButton(txtbox1.Text); txtbox1.Text = ""; } }
    private void AddButton(string p)
    {
    Button B = new Button();
    B.Size = new Size(60, 24);
    B.Text = p;
    B.Tag = p;
    B.Click += B_Click;
    flowLayoutPanel1.Controls.Add(B);
    Buttons.Add(B);
    if (Buttons.Count > 30) Buttons.RemoveAt(0);
    if (flowLayoutPanel1.Controls.Count > 32) flowLayoutPanel1.Controls.RemoveAt(2);
    }
    void B_Click(object sender, EventArgs e) { CButton = (Button)sender; ShowCurrent(); gm.GridOptions.PrintOptions.Parameters = new string[1] { CButton.Text }; }
    private void ShowCurrent()
    {
    dataGridView1.DataSource = new BindingSource(Esfand.Data.DataClasses.Masir.PKFind (Esfand.Interaction.Val_long(CButton.Tag)), "ChildMoshtarys");
    if (gm == null) gm = new Esfand.ProfileManagement.GridManager(dataGridView1 , this.FormOptions, "Main", this);
    }
    private void button1_Click(object sender, EventArgs e) { foreach (Button B in Buttons) Print(B); }
    private void button2_Click(object sender, EventArgs e) { Print(CButton); Buttons.Remove(CButton); flowLayoutPanel1.Controls.Remove(CButton); }
    private void Print(Button B) { if (B != CButton) { CButton = B; ShowCurrent(); } Esfand.ProfileManagement.GridManager.PrintCurrentG rid(); }
    ProfileManagement.GridManager gm;
    Esfand.ProfileManagement.FormOptions formOptions; public Esfand.ProfileManagement.FormOptions FormOptions { get { if (formOptions == null)formOptions = ((Esfand.ProfileManagement.ICollection<Esfand.Prof ileManagement.FormOptions>)Esfand.ProfileManagemen t.AccountsList.Current.CurrentAccount).Find(this.G etType().FullName); return formOptions; } }
    System.Windows.Forms.DataGridView[] grids; System.Windows.Forms.DataGridView[] Esfand.ProfileManagement.FormEx.Grids { get { if (grids == null) grids = new DataGridView[1] { dataGridView1 }; return grids; } }
    private void Form_Print_FormClosing(object sender, FormClosingEventArgs e) { if (gm != null) gm.Abort(); }
    }
    }
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله FastCode : پنج شنبه 24 دی 1388 در 20:53 عصر

  12. #12

    نقل قول: اضافه كردن چند كليد با حلقه for

    آره با تگ هم میشه کار کرد شاید بهتر از text هم باشه

  13. #13

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    کاملا" مخالفم. برنامه ی من opensource نیست ولی اسپاگتی کد هم نیست. یک فرم با کلی امکانات:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    namespace Esfand.Gozareshat.List_Masir
    {
    public partial class Form_Print : System.Windows.Forms.Form, Esfand.ProfileManagement.FormEx
    {
    System.Collections.Generic.List<Button> Buttons;
    Button CButton;
    public Form_Print()
    {
    InitializeComponent();
    dataGridView1.AutoGenerateColumns = false;
    Buttons = new System.Collections.Generic.List<Button>();
    combo1.DisplayMember = "Name";
    combo1.ValueMember = "Code";
    combo1.DataSource = Esfand.Data.DataClasses.Masir.GetSharedData();
    Buttons = new System.Collections.Generic.List<Button>();
    if (flowLayoutPanel1.Controls.Count > 2) flowLayoutPanel1.Controls.RemoveAt(2);
    }
    private void combo1_SelectedIndexChanged(object sender, EventArgs e) { if (combo1.SelectedIndex != -1) AddButton(combo1.SelectedValue.ToString()); }
    private void txtbox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { AddButton(txtbox1.Text); txtbox1.Text = ""; } }
    private void AddButton(string p)
    {
    Button B = new Button();
    B.Size = new Size(60, 24);
    B.Text = p;
    B.Tag = p;
    B.Click += B_Click;
    flowLayoutPanel1.Controls.Add(B);
    Buttons.Add(B);
    if (Buttons.Count > 30) Buttons.RemoveAt(0);
    if (flowLayoutPanel1.Controls.Count > 32) flowLayoutPanel1.Controls.RemoveAt(2);
    }
    void B_Click(object sender, EventArgs e) { CButton = (Button)sender; ShowCurrent(); gm.GridOptions.PrintOptions.Parameters = new string[1] { CButton.Text }; }
    private void ShowCurrent()
    {
    dataGridView1.DataSource = new BindingSource(Esfand.Data.DataClasses.Masir.PKFind (Esfand.Interaction.Val_long(CButton.Tag)), "ChildMoshtarys");
    if (gm == null) gm = new Esfand.ProfileManagement.GridManager(dataGridView1 , this.FormOptions, "Main", this);
    }
    private void button1_Click(object sender, EventArgs e) { foreach (Button B in Buttons) Print(B); }
    private void button2_Click(object sender, EventArgs e) { Print(CButton); Buttons.Remove(CButton); flowLayoutPanel1.Controls.Remove(CButton); }
    private void Print(Button B) { if (B != CButton) { CButton = B; ShowCurrent(); } Esfand.ProfileManagement.GridManager.PrintCurrentG rid(); }
    ProfileManagement.GridManager gm;
    Esfand.ProfileManagement.FormOptions formOptions; public Esfand.ProfileManagement.FormOptions FormOptions { get { if (formOptions == null)formOptions = ((Esfand.ProfileManagement.ICollection<Esfand.Prof ileManagement.FormOptions>)Esfand.ProfileManagemen t.AccountsList.Current.CurrentAccount).Find(this.G etType().FullName); return formOptions; } }
    System.Windows.Forms.DataGridView[] grids; System.Windows.Forms.DataGridView[] Esfand.ProfileManagement.FormEx.Grids { get { if (grids == null) grids = new DataGridView[1] { dataGridView1 }; return grids; } }
    private void Form_Print_FormClosing(object sender, FormClosingEventArgs e) { if (gm != null) gm.Abort(); }
    }
    }
    سلام.
    قبل از اینکه بهتون پاسخ بدم یادآور میشم که You are not your code! حالا بریم [FONT=tahoma,geneva,lucida,'lucida grande',arial,helvetica,sans-serif]سراغ کد شما. [/FONT]شما به این کد میگید "کد"؟؟؟ حتما دارید شوخی می کنید با من. اسم گذاریها که افتضاحه، flowLayoutPanel1، B، combo1، dataGridView1 و ... فکر کردید Spaghetti Code چیه؟ فقط Call کردنهای متوالی و دسترسی به متغیر کلاسهای دیگه، بدون هیچ ضابطه ای؟ خیر! این اسم گذاریها نشون میده که کد شما، کاملا Spaghetti هستش.

    مساله بعدی، کاری هستش که در txtbox1_KeyDown انجام داده اید. شما اینجا نگاه می کنید آیا کلید Enter زده شده یا خیر و سپس کاری رو انجام میدید. اگر قرار باشه که جاهای دیگه از این نوع TextBox استفاده کنید، باز هم می خواهید این تکه کد رو که "آیا کلید زده شده Enter بوده یا خیر"، رو توی KeyDown اون TextBox بنویسید؟ پس Code Reusing چی میشه؟ Subclass کردن رو برای چی درآوردن؟؟؟ اینم یه دلیل دیگه واسه اسپاگتی بودن کد.

    مساله بعدی... ctor کلاس رو نگاه کنید. چرا دوبار این خط رو نوشته اید؟

    Buttons = new System.Collections.Generic.List<Button>


    ترسیدید دفعه اول new نشه؟ (دارم شوخی میکنم اما جدا چرا دوبار تکرار شده؟؟؟)

    شما به این میگید یک فرم با کلی امکانات؟؟؟ پس Object Oriented چی میشه؟ چرا یه کلاس MyBaseForm ندارید که کارهای پایه رو که همه فرمها بهش نیاز دارن توش انجام بدید و سپس فرمهای دیگه از اون Derive بشن؟ فقط به صرف Implement کردن Esfand.ProfileManagement.FormEx روی کلاس خودتون، فکر کرده اید کار بزرگی انجام داده اید؟؟؟

    به این خط از کد نگاه کنید:

    combo1.DisplayMember = "Name";


    داره داد میزنه که Refactor باید بشه. اگر فردا تو Middle Layer اتون، ستون Name رو به WhateverFieldName تغییر بدید، باید دونه به دونه کلیه String های Name رو تو Source پیا کنید و دستی اونو به WhateverFieldName تغییر بدید. این یعنی اسپاگتی...

    شما جای اینکه OnFormClosing رو override کنید، خودتون رو برای گرفتن FormClosing Event دارید Subscribe می کنید؟؟؟

    برنامه شما ممکنه Open Source نباشه و "گمان" کنید که UI زیبایی داره، اما بدون شک Spaghetti Code هستش...

    موفق باشید.

  14. #14
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: اضافه كردن چند كليد با حلقه for

    من فکر میکنم اسپاگتی یعنی این که 1000 خط دستور توی یک فرم باشه و هیچ کار خاصی انجام نده , و بجای refactor کردن کد اضافی بنویسن.
    صد در صد برای MyBaseForm دلیل داشتم.
    در ضمن همین جا اعلان میدارم که UI زشتی داره چون روش کار نکردم و فقط به کد چسبیدم.
    در ضمن Buttons = new System.Collections.Generic.List<Button>(); رو ندیده بودم.(از اسمها هم مشخص که این فرم کار 5 دقیقست. و من میخواستم کوچکترین مثالی رو که دارم بزارم اینجا تا سوال کننده راحتتر متوجه بشوند)
    می خواستم بدونم که شما تا حالا اسپاگتی کد واقعی دیدید؟از اونایی که هر فرم 20000 خط؟

  15. #15

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط 8411172410 مشاهده تاپیک
    من با حلقه for میخوام به برنامه کنترل اضافه کنم اما فقط یه دونه اضافه میشه.چرا؟[

    for (int i=1; i <5; i++)
    {Button page = new Button();
    page.Location = new System.Drawing.Point(15, 47);
    this.Controls.Add(page);
    ببين اين كد به كارت مياد من با اين كد يه سلكت انجام مي دم و نتيجه را به تكست باتن مي ريزم

    con.Open();
    cmd = new SqlCommand("select distinct (city) from honar", con);
    dr = cmd.ExecuteReader();

    int i = 0;
    while (dr.Read())
    {
    i = i + 1;
    btn = new Button();
    btn.Size = new Size(70, 70);
    btn.Location = new Point((i % 7) * 70, (i / 7) * 70);
    btn.Text = (dr[0].ToString());
    this.Controls.Add(btn);
    }
    con.Close();

  16. #16

    نقل قول: اضافه کردن چند کلید با حلقه for

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    من فکر میکنم اسپاگتی یعنی این که 1000 خط دستور توی یک فرم باشه و هیچ کار خاصی انجام نده , و بجای refactor کردن کد اضافی بنویسن. صد در صد برای MyBaseForm دلیل داشتم. در ضمن همین جا اعلان میدارم که UI زشتی داره چون روش کار نکردم و فقط به کد چسبیدم. در ضمن Buttons = new System.Collections.Generic.List<Button>(); رو ندیده بودم.(از اسمها هم مشخص که این فرم کار 5 دقیقست. و من میخواستم کوچکترین مثالی رو که دارم بزارم اینجا تا سوال کننده راحتتر متوجه بشوند) می خواستم بدونم که شما تا حالا اسپاگتی کد واقعی دیدید؟ از اونایی که هر فرم 20000 خط؟
    سلام.
    تعدا خطوط برنامه در یک کلاس، لزوما ربطی به Spaghetti بودن یا نبودن نداره. در وهله اول، این عبارت به هر کد Unstructured ای اطلاق میشه. در مقابل، سیستمهای Structured رو داریم که وظائفشون رو از طریق "اینترفیسهای خوب تعریف شده" انجام میدن.

    در مرحله بعدی، کدهایی رو میگن اسپاگتی که بی رویه شاخه اجرایی کد رو تغییر میدن! مثلا کدهایی که if زیاد دارن، goto های زیاد دارند و هر آنچیزی که باعث میشه روند اجرایی شاخه اصلی، مدام تغییر کنه. (من منظورم این نبود، وقتی گفتم کد شما اسپاگتی کد هستش. منظورم اون اولی بود. یعنی Structured نیست!)

    فقط همین.
    موفق باشید.

  17. #17

    نقل قول: اضافه کردن چند کلید با حلقه for

    چرا یه کلاس MyBaseForm ندارید که کارهای پایه رو که همه فرمها بهش نیاز دارن توش انجام بدید و سپس فرمهای دیگه از اون Derive بشن؟
    یه سوال:
    چه چیزهایی رو باید درون MyBaseForm بزاریم
    لطفا کمی در این مورد توضیح بدین

  18. #18
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: اضافه كردن چند كليد با حلقه for

    دستورات کنترلی برای بستن و باز کردن فرم.
    تنظیمات style font و رنگ.
    افزودن امکانات عمومی مثل contextmenu.
    ...

  19. #19

    نقل قول: اضافه كردن چند كليد با حلقه for

    بعضی از دوستان برنامه هاشونو خیلی پیچوندن کاربر نمیتونه کار کنه اینجوری که

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •