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

نام تاپیک: فراخوانی داده های موچود در textbox در چندین فرم دیگر

  1. #1

    فراخوانی داده های موچود در textbox در چندین فرم دیگر

    باسلام خدمت اساتید محترم. بنده خیلی گشتم و خیلی سعی کردم که این مشکل رو حل کنم ولی نشد که نشد. مشکل اینجاست که تو فرم اولم 3 تا TextBox دارم که شامل IP و User و Pass میکروتیکی که میخوام بهش وصل بشم هستش. توی فرم های مختلف میخوام به میکروتیک به وسیله این اطلاعاتی که تو فرم اول وارد میکنم، برم و وصل بشم. تا اونجایی که تونستم فقط تو یه فرم میتونم اطلاعات این فرم رو فراخونی کنم. ولی وقتی میخوام از دو فرم یا بیشتر این اطلاعات رو بخونم، برنامه کار نمیکنه و یه صفحه سفید میاره بهم نشون میده. از دوستان کسی هست که بتونه کمکم کنه لطفا؟ اگر لینکی باشه که بتونه بهم کمک کنه هم ازتون ممنون میشم اگه راهنماییم کنین. مرسی
    توضیح اینکه زبان برنامه نویسی بنده WPF هستش.

  2. #2

    نقل قول: فراخوانی داده های موچود در textbox در چندین فرم دیگر

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

    چند راه وجود داره :
    1) یکی اش اینه که در xaml ، فرضا یه ویندوزی با نوع MainWindow دارید که یه شی کنترل TextBox داره . این شی کنترل را ، هم براش directive ئه x:Name تعیین کنید و به این ترتیب یه نام ای دلخواه (فرضا نام UserNameTextBox را براش انتخاب میکنید) به این کنترل بدید و همچنین directive ئه x:FieldModifier را براش تعریف کنید و فرضا مقدار Public را بهش بدید تا از کلاس های دیگه ، در دسترس باشه :


    <TextBox x:FieldModifier="public" x:Name="UserNameTextBox" />


    دقت کنید که با پروپرتیِ Name ، نباید بهش مقدار بدید . حتما باید با x:Name ، بهش مقدار بدید چون میخواید در کنترل دیگه ای قابل دسترس باشه .

    بعد ، درون ویندوز دیگه (فرضا نوع این ویندوز ، OtherWindows هست) (یا user control یا ...) ، همین کار را برای کنترل مقصدی که میخواین این اطلاعات در اون کنترل هم نمایش داده بشه (یا فقط استفاده بشه) ، همین کار را میکنید . یعنی فرضا در ویندوزِ OtherWindows ، یه شی کنترل دکمه (فرضا با نام DisplayButton) میسازید که میخواید محتواش ، همون محتوای TextBox تون بشه ، در این کنترل دکمه ، هم x:FieldModifier و هم x:Name اش را مثل بالا ، تعیین میکنید .

    بعد ، وقتی از درون MainWindow یا رویدادی از کنترلی در این ویندوز ، از ویندوزِ OtherWindows ، شی میسازید تا نمایشش بدید ، قبل از نمایش دادن ، مقدار DataContext ئه دکمه ای که میخواین اطلاعات را در اون نمایش بدید (DataContext ئه DisplayButton) را برابر با مقدار TextBox ئه مورد نظر (UserNameTextBox) قرار بدید .
    یعنی فرضا در رویداد دکمه ای که درون MainWindow قرار داره و توش میخوان شی ای از OtherWindow بسازین :


    private void Button_Click(object sender, RoutedEventArgs e)
    {
    OtherWindows otherWindow = new OtherWindows();
    otherWindow.DisplayButton.DataContext = this.UserNameTextBox;
    otherWindow.Show();
    }


    بعد ، هر پروپرتی ای از DisplayButton (که در پنجره ی OtherWindow هست) را که خواستین (فرضا پروپرتی Content ئه این دکمه) را Binding کنید به پروپرتیِ مورد نظر در TextBox ای که در پنجره ی MainWindow هست (فرضا Binding را به پروپرتیِ Text ئه UserNameTextBox انجام میدید) :


    <Button x:Name="DisplayButton" x:FieldModifier="public" Content="{Binding Path=Text}"/>


    -------

    ** دقت کنید که در خط زیر در کد بالا :


    otherWindow.DisplayButton.DataContext = this.UserNameTextBox;


    ، نباید مقدار DataContext را برابر با شیِ MainWindow بگیرید . یعنی نباید این طور بنویسید :


    otherWindow.DisplayButton.DataContext = this;


    تا بعدش ، نباید کد Binding ئه DisplayButton را این طور تغییر بدید :


    <Button x:Name="DisplayButton" x:FieldModifier="public" Content="{Binding Path=UserNameTextBox.Text}"/>


    ** چون تا جایی که میدونم ، در آدرسِ Path ئه Binding ، همه ی اشیایی که میدید ، باید از پروپرتی باشن اما در کد بالا ، UserNameTextBox ای که در Path ئه Binding دادیم ، یک فیلد هست و پروپرتی نیست . واسه همین ، این کد بالا ، اشکال داره .

    ** یا میتونید بجای Binding به پروپرتی DisplayButton و کلا استفاده از Button ، یه پروپرتی دیگه خودتون در کلاس OtherWindow تعریف کنید (حتما DipendencyProperty باشه) و به این پروپرتی ، Binding انجام بدید (که اصولی ترش ، اینه) .

    ==========

    2) روش دوم و حتی راحت تر (که در WinForm هم رایج هست) اینه که یه عضوی درون OtherWindow تعریف کنید و موقعی که شی ای از این در رویدادی در MainWindow دارید میسازید ، به اون عضو ، مقدارِ Text ئه TextBox را ارسال کنید :


    private void Button_Click(object sender, RoutedEventArgs e)
    {
    OtherWindows otherWindow = new OtherWindows();
    otherWindow.UserNameString = this.UserNameTextBox.Text;
    otherWindow.Show();
    }


    که UserNameString ، عضوی تعریف شده در پنجره ی OtherWindows و از نوع string هست .
    اما توی wpf بهتره که از روش binding استفاده کنید .




تاپیک های مشابه

  1. پاسخ: 3
    آخرین پست: سه شنبه 17 تیر 1393, 18:27 عصر
  2. پاسخ: 7
    آخرین پست: دوشنبه 11 فروردین 1393, 00:38 صبح
  3. تغییر زبان textbox / حرکت بین textbox با دکمه enter / فهمیدن اینکه الان کدام دکمه فشرده شده است
    نوشته شده توسط fafa_na در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 0
    آخرین پست: شنبه 17 تیر 1391, 10:06 صبح
  4. پاسخ: 3
    آخرین پست: پنج شنبه 07 مرداد 1389, 19:04 عصر

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

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