2013-05-15 107 views
0

我想开发一个Windows 8 Metro应用程序我需要创建任意数量的单选按钮,但Checked事件处理程序不会启动。

我在一些文章中看到我必须启用AutoPostBack。

请让我知道它是哪个命名空间?此外,我发现它是在System.Web.UI.Webcontrols,但我无法包括名字空间..

我使用的Visual Studio 2012最终是否有帮助关于动态创建的单选按钮在c#

RadioButton rad=new RadioButton(); 
      rad.HorizontalAlignment = HorizontalAlignment.Left; 
      rad.VerticalAlignment = VerticalAlignment.Top; 
      rad.Margin = new Thickness(1100, x, 0, 0); 
      rad.Width = 35; 
      rad.Height = 30; 
      rad.GroupName = "group1"; 
      rad.IsEnabled = true; 
      rad.Checked += new RoutedEventHandler(radbtn); 
      gridit.Children.Add(rad[i]); 

void radbtn(object obj, RoutedEventArgs e) 
    { 
     edit_del_tb.Text = "Testing"; 
    } 
+2

哪里是你的代码,你试过吗? –

+1

你显然没有搜索之前询问...谷歌搜索“autopostback”在第一个结果中提供了很好的答案... –

+0

RadioButton确实在System.Web.UI.WebControls.RadioButton中,一旦你创建了一个实例键入服务器端,可以将其AutoPostBack属性设置为true –

回答

2

AutoPostBack不一个名称空间,它的属性为CheckBox,因为RadioButton继承自CheckBox

您还必须确保在每次回发时都重新创建动态控件,其ID与以前相同,并且最迟在Page_Load之间。在这个类

RadioButton btn = new RadioButton(); 
btn.AutoPostBack = true; 
btn.CheckedChanged += this.RadioButton_CheckedChanged; 
Panel1.Controls.Add(btn); 

How to: Add Controls to an ASP.NET Web Page Programmatically.

编程注册CheckedChanged事件

private void RadioButton_CheckedChanged(Object sender, EventArgs e) 
{ 
    // get the reference to the RadioButton that caused the CheckedChanged-event 
    RadioButton btn = (RadioButton) sender; 
} 
+0

我已经做到了。请参阅我的编辑。对不起,我没有先添加我的代码 – user1875119

+0

@ user1875119:对不起,我忘了在第一个版本中添加'AutoPostback'代码,编辑了我的答案。您需要在每个回发中重新创建动态控件,否则事件不会被触发。 –

+0

btn.AutoPostBack = true;这是我得到的错误,AutoPostBank没有在'Windows.UI.Xaml.Controls.RadioButton' – user1875119

0

首先,你需要更好地了解什么UI技术,您正在使用的。

.NET有很多的UI框架:

  • 的WinForms
  • WPF
  • 的Silverlight
  • ASP.NET web表单
  • ASP.NET MVC
  • 的Windows Phone,
  • 的Windows存储应用。

大多数这些UI框架都有RadioButton控件。它们是不同的类别,具有不同的属性和行为。

回传是ASP.NET webforms世界的一部分,不是你正在寻找的

确保您在寻找使用正确框架的帮助时。 (MSDN上通常有在页面顶部的下拉列表。)

工作实例

看起来你的问题是,您要添加单选按钮的数组到网格,而不是单选按钮本身。它有点难以分辨,因为你没有包含你的XAML或所有的C#代码。

这是一些可以工作的代码。

XAML

<Grid 
     Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height='30' /> 
     <RowDefinition Height='1*' /> 
    </Grid.RowDefinitions> 
    <TextBlock x:Name='edit_del_tb' /> 
    <Grid Grid.Row='1' 
      x:Name='gridit'></Grid> 
    </Grid> 

C#代码

public MainPage() { 
     this.InitializeComponent(); 
     for (int i = 0; i < 4; i++) 
     { 
     RadioButton rad = new RadioButton(); 
     rad.HorizontalAlignment = HorizontalAlignment.Left; 
     rad.VerticalAlignment = VerticalAlignment.Top; 
     rad.Margin = new Thickness(100, i * 40, 0, 0); 
     rad.Width = 350; 
     rad.Height = 30; 
     rad.GroupName = "group1"; 
     rad.IsEnabled = true; 
     rad.Content = "Button " + i; 
     rad.Checked += new RoutedEventHandler(radbtn); 
     gridit.Children.Add(rad); 
     } 

    } 
    void radbtn(object obj, RoutedEventArgs e) { 
     edit_del_tb.Text = (obj as RadioButton).Content.ToString(); 
    }