2011-01-28 13 views
0

fb/orkutに画像をアップロードするときのように、画像と2つのラジオボタンを保持できるコントロールが必要です。 1.画像 2.ラジオボタンを削除します。 3.カバーラジオボタン[アルバムのカバーとしてこの画像を設定]ラジオボタンによる画像コントロール

私はこれらの3つのものでユーザーコントロールを作成しました。 私のaspxページのボタンをクリックすると、このユーザーコントロールを追加する必要があります。 FileUploadを使用してイメージを選択し、ボタンをクリックすると、このユーザーコントロールをロードする必要があります。 コントロールをロードできます。次のコードを確認してください。

<code> 
<pre lang="cs"> 
protected void btnAddURL_Click(object sender, EventArgs e) 
{ 

    if (FileUpload1.HasFile) 
    { 
//ItemList is an array list used to store the filename. 
     ItemList.Add(FileUpload1.FileName); 
     showImage(); 
    } 
    }</pre> 

    public void showImage() 
    { 

     PlaceHolder p = new PlaceHolder(); 

//Create Thumbnail 
     FileUpload1.SaveAs(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\" + FileUpload1.FileName); 
     System.Drawing.Image img1 = System.Drawing.Image.FromFile(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\" + FileUpload1.FileName); 
     System.Drawing.Image bmp2 = img1.GetThumbnailImage(100, 100, null, IntPtr.Zero); 
     bmp2.Save(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\thumbnail\L\" + FileUpload1.FileName); 

//Load the images selected by user 
     for (int i = 0; i &lt;= ItemList.Count - 1; i++) 
     { 
      Control MyUserControl; 


// Load user control dynamically 
       MyUserControl = LoadControl(&quot;MyControl.ascx&quot;); 
        MyUserControl.ID = &quot;MyUserControl&quot; + cnt++; 
    // Assign URL 
    Image MyImage = (Image)MyUserControl.FindControl("Image1"); 
        // MyImage.ID = "Image" + cnt; 
        MyImage.ImageUrl = "~/SaveImage/thumbnail/L/" + ItemList[i].ToString(); 
    // Add control to panel. 
        p.Controls.Add(MyUserControl); 
        Panel2.Controls.Add(p); 

</code> 

問題: 1>すべての画像は、私は隣同士にそれらをしたい新しい行に来ます。 2>複数の画像があるため、どのラジオボタンがクリックされたかを検出する方法はすべてラジオボタンがあります。 3> aspxページからラジオボタンのクリックをキャプチャする方法は? 4>これを達成するための他の方法がある場合はお知らせください。

Googleで検索しましたが、解決策が見つかりませんでした。 :(事前に 感謝。

[コードの変更後] ASCXファイルで、私はコード

public event EventHandler rd_ClickDemo; 

protected void deleteimage_CheckedChanged(object sender, EventArgs e) 
    { 
     rd_ClickDemo(sender, e); 
    } 
    protected void setascover_CheckedChanged(object sender, EventArgs e) 
    { 
     rd_ClickDemo(sender, e); 
    } 

In aspx file on click of a button i am doing the following. 

protected void btnAddURL_Click(object sender, EventArgs e) 
    { 

     if (FileUpload1.HasFile) 
     { 
      // Add file name to array list 
      ItemList.Add(FileUpload1.FileName); 

      //Add The URL in a text box. 
      txtAddURL.Text = txtAddURL.Text + System.Environment.NewLine + System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName); 
      //Image1.ImageUrl = System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName);   
      //this.Button1_Click(this, e); 

      showImage(); 
     } 
    } 

public void showImage() 
{ 

     PlaceHolder p = new PlaceHolder(); 

// Create a Thumbnail Image. 
     FileUpload1.SaveAs(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\" + FileUpload1.FileName); 
     System.Drawing.Image img1 = System.Drawing.Image.FromFile(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\" + FileUpload1.FileName); 
     System.Drawing.Image bmp2 = img1.GetThumbnailImage(100, 100, null, IntPtr.Zero); 
     bmp2.Save(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\thumbnail\L\" + FileUpload1.FileName); 

//Load all images from array list. 
     for (int i = 0; i <= ItemList.Count - 1; i++) 
     { 

      // Load user control dynamically 
      MyUserControl = LoadControl("MyControl.ascx"); 

      MyUserControl.ID = "MyUserControl" + cnt++; 

      // Find Radio Button 
      RadioButton rdb1 = (RadioButton)MyUserControl.FindControl("deleteimage"); 
      RadioButton rdb2 = (RadioButton)MyUserControl.FindControl("setascover"); 

      //Attach Group Name. 
      rdb1.GroupName = "G1" + cnt.ToString(); 
      rdb1.ID = "Rb_ID_D" + cnt.ToString(); 
      rdb1.AutoPostBack = true; 
      rdb1.CheckedChanged +=new EventHandler(rdb1_CheckedChanged); 

      //Attach Group Name. 
      rdb2.GroupName = "G1"+ cnt.ToString(); 
      rdb2.ID = "Rb_ID" + cnt.ToString(); 
      rdb2.AutoPostBack = true; 
      rdb2.CheckedChanged += new EventHandler(rdb1_CheckedChanged); 
      //Image MyImage = (Image)MyUserControl.FindControl("Image1"); 
      // MyImage.ID = "Image" + cnt; 

      //Attach URL to Image. 
      Image MyImage = (Image)MyUserControl.FindControl("Image1"); 
      MyImage.ImageUrl = "~/SaveImage/thumbnail/L/" + ItemList[i].ToString(); 
      p.Controls.Add(MyUserControl); 
      Panel2.Controls.Add(p); 
     } 
} 

まだ私はradiobutton_CheckedChangedイベントをトリガすることはできませんよ、次の追加されました。 助けてください。

+0

は、HTMLのためにあなたのコードをフォーマットしようとしたように見えますが、あなたはしないでくださいStackOverflowのエディタがそうするために十分スマートなので、そうする必要があります。 –

答えて

1

これで最初の問題の解答は次のようになります。

1>すべての画像が新しい線で結ばれます。
件の回答:あなたはカスタムコントロールのdivのブロックのCSSで行うことができ、ちょうど私が複数の画像を持っているようにクリックされたラジオボタンを検出する方法この

style="display:block;float:right;" 

2>のように左にフロートを設定し、すべてラジオボタンを持っています。
Ans:RadioButtonをホストするコントロールを取得できるので、ラジオボタンのNamingContainerプロパティを使用して、カスタムコントロールでなければならないホスティングコントロールを取得できます。

3> aspxページからラジオボタンのクリックをキャプチャするにはどうすればよいですか?
Ans:

最初にカスタムコントロールを追加してPanel2に追加するときに、グループ名とイベントハンドラをRadioButtonに添付します。 (私はイベントを処理するため、匿名デリゲートを使用しています)CheckedChangedイベントを処理し、その後(すでにカスタムコントロールであなたのラジオボタンを持っていると仮定)と

RadioButton rdb1 = (RadioButton)MyUserControl.FindControl("deleteimage"); 
RadioButton rdb2 = (RadioButton)MyUserControl.FindControl("setascover"); 

rd1.GrouprdoSelect2.GroupName = "radiobutton" + i.ToString() ; 
rd1.ID = "radiobutton" + i.ToString() + i.ToString() + Convert.ToString(1); 
rd1.AutoPostBack = true; 
rd1.CheckedChanged += (thesender, ev) => { 
     RadioButton rb = (RadioButton) thesender; 
     MyUserControl mcl = rb.NamingContainer as MyUserControl; 
     //Perform your task based on the fact of mcl.ID 
    } 

rd2.GrouprdoSelect2.GroupName = "radiobutton" + i.ToString() ; 
rd2.ID = "radiobutton" + i.ToString() + i.ToString() + Convert.ToString(2); 
rd2.AutoPostBack = true; 
rd2.CheckedChanged += (thesender, ev) => { 
     RadioButton rb = (RadioButton) thesender; 
     MyUserControl mcl = rb.NamingContainer as MyUserControl; 
     //Perform your task based on the fact of mcl.ID 
    } 
+0

私の回答を更新しました –

+0

こんにちは、上記のコードチェックを編集しました。 – Sayed

+0

私の最初の問題は解決しました:)ありがとう。 – Sayed

関連する問題