مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

اشکال در شناسایی آبجکت ها در wpf

  • شنبه 8 خرداد 1395
  • 16:14
تشکر میکنم

با سلام

دوستان من در ویندوز فرم از این تکه کد برای شناسایی و قفل کردن کنترل های روی فرم استفاده می کردم

اما در wpf دچار مشکل شدم

ممکنه دوستان بررسی کنند و نظرشون را بگن

ممنونم

foreach (Control Ctrl in this.Controls)
         {
              string x = Ctrl.GetType().ToString();
              switch (Ctrl.GetType().ToString())
               {
               case "System.Windows.Forms.TextBox":
                    ((TextBox)Ctrl).ReadOnly = !EditState;
                     break;
                  case "System.Windows.Forms.ComboBox":
                     ComboBox Ctr = new ComboBox();
                  ((ComboBox)Ctrl).Enabled = EditState;
                  break;
                 case "System.Windows.Forms.CheckBox":
                      ((CheckBox)Ctrl).Enabled = EditState;
                       break;

                  default:

            break;
               }


          }

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • شنبه 8 خرداد 1395
  • 16:32

درست متوجه کدتون نشدم، لطفا داخل بخش Code این Editor وارد کنید و بیشتر توضیح دهید که کار اصلی کد چیست!؟. ولی بصورت کلی برای فعال یا غیرفعال کردن Element های صفحه شما می توانید از binding ویا از Trigger های داخل صفحه XAML استفاده کنید.

در مثال زیر زمانی که Checkbox تیک بخورد Textbox فعال میشود :

<CheckBox Name="checkBox1" />
<TextBox IsEnabled="{Binding ElementName=checkBox1, Path=IsChecked}" />

در مثال بعدی زمانی که Textbox خالی باشد دکمه مورد نظر غیر فعال میشود :

<StackPanel>
    <TextBox x:Name="TheTextBox" />
    <Button Content="Click Me">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="IsEnabled" Value="True" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Text, ElementName=TheTextBox}" Value="">
                        <Setter Property="IsEnabled" Value="False" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</StackPanel>

 

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

  • سه شنبه 11 خرداد 1395
  • 07:22

سلام

ببخشید من دیر جواب دادم.

من برای برنامه نویسی فرم های ورود داده سه حالت AddNew, Search, Edit را دارم.

در حالت عادی فرم تمامی کنترل های Text, Combo, chechbox و... لاک(Readonly) ولی فعال هستند و فقط در حالت AddNew, Edit فعالند.

در حالتهای AddNew , Edit دکمه های Delete, Search غیر فعال هستند

کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • سه شنبه 11 خرداد 1395
  • 09:24

برای فعال یا غیر فعال کردن Element ها موجود در صفحه لازم نیست با روش Winforms این عمل را انجام دهید می توانید با غیر فعال کردن StackPanel , Wrap, ... که Element های شما در آن قرار دارد تمامی آنها را غیر فعال کنید و در صورتی که می خواهید تمام بخش های صفحه را غیر فعال کنید کافیست از ContentControl استفاده کنید و تمامی قسمت های خود را داخل آن قرار دهید و توسط نام آن تمامی کنترل ها را فعال یا غیر فعال کنید ، مثال:

<StackPanel>
        <Button Content="Enable/Disable" x:Name="btnClick" Click="btnClick_Click" Margin="5" Width="100"/>
        <ContentControl x:Name="MainControl">
            <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="5">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="20"/>
                        <RowDefinition Height="20"/>
                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="70"/>
                        <ColumnDefinition Width="90"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="Fullname" Grid.Row="0" Grid.Column="0" />
                    <TextBox Grid.Row="0" Grid.Column="1"/>
                    <TextBlock Text="Address" Grid.Row="1" Grid.Column="0"/>
                    <TextBox Grid.Row="1" Grid.Column="1"/>
                </Grid>
                <Button Content="Update" Margin="5" Width="100"/>
            </StackPanel>
        </ContentControl>
    </StackPanel>
private void btnClick_Click(object sender, RoutedEventArgs e)
        {
            MainControl.IsEnabled = !MainControl.IsEnabled;
        }

 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)