none
如何强制转换为Control类型 RRS feed

  • 问题

  •  我们常常有 Control as TextBox 之类的用法。怎样实现 TextBox as Control等反向转换?

    有函数或方法

    test(Control control)
    {
        //control.Name
        //
    }

    怎样去传这个参数?

    补充说明:在silverlight项目中
    • 已编辑 doo.EK 2009年2月11日 14:23
    2009年2月11日 12:49

答案

  •   这种无需转换。因为所有的控件都是继承Control的
      void test(Control control)  
      {  
        MessageBox.Show(control.Name);  
      }  
     
      private void Form1_Load(object sender, EventArgs e)  
      {  
        test(this.textBox1);  
      } 

    孟宪会
    2009年2月11日 14:10
    版主

全部回复

  •   这种无需转换。因为所有的控件都是继承Control的
      void test(Control control)  
      {  
        MessageBox.Show(control.Name);  
      }  
     
      private void Form1_Load(object sender, EventArgs e)  
      {  
        test(this.textBox1);  
      } 

    孟宪会
    2009年2月11日 14:10
    版主
  •   不好意思!忘了说明是在silverlight 中

    直接 test(this.textBox) 报错"Argument : cannot convert from....."错误
    2009年2月11日 14:22
  • doo.EK 说:

    不好意思!忘了说明是在silverlight 中

    直接 test(this.textBox) 报错"Argument : cannot convert from....."错误



    一样啊
    <UserControl x:Class="SilverlightCrossDomainCallWebService.Page" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
        Width="400" Height="300">  
     <Grid x:Name="LayoutRoot" Background="White">  
      <StackPanel x:Name="ButtonPanel" HorizontalAlignment="Left">  
       <Button Content="调用" Width="200" Margin="10" Click="Button_Click"></Button> 
       <TextBox x:Name="Result" Width="360" Margin="10"></TextBox> 
       <TextBox x:Name="TextBox1" Width="360" Margin="10"></TextBox> 
      </StackPanel> 
     </Grid> 
    </UserControl> 
     

    private void Button_Click(object sender, RoutedEventArgs e)  
    {  
      this.Result.Text = test(this.TextBox1);  
     
    }  
    string test(Control control)  
    {  
      return control.Name;  
    }     
     
    2009年2月11日 14:34
    版主
  •  
    <UserControl x:Class="coverControl.Page" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
        Width="400" Height="300">  
        <Grid x:Name="LayoutRoot" Background="White">  
            <StackPanel x:Name="ButtonPanel" HorizontalAlignment="Left">  
                <Button x:Name="Button1" Content="调用" Width="200" Margin="10" Click="Button_Click"></Button> 
                  
                <!--真是异类 -_-!!!!  --> 
                <TextBlock x:Name="TextBlock1" Text="I cannot convert to Control" /> 
                  
                <TextBox x:Name="Result" Width="360" Margin="10"></TextBox> 
                <TextBox x:Name="TextBox1" Width="360" Margin="10"></TextBox> 
            </StackPanel> 
        </Grid> 
    </UserControl> 
    原来我一直用 TextBlock做测试(可以去买奖票了)~~唉~还痛苦一整天
    查了下MSDN结果水落石出
    继承层次结构
    System.Object
      System.Windows.DependencyObject
        System.Windows.UIElement
          System.Windows.FrameworkElement
            System.Windows.Controls.TextBlock

    感谢孟宪会的回复与代码示范
    2009年2月11日 15:34