2011-11-07 45 views
0

我試圖執行雙向綁定,例如我有一個按鈕(在很多控件之外),在它的選擇上,我顯示了它的diff屬性的值(如高度,寬度等等)在一些文本輸入。這種單向過程正常工作。如何在Flex中處理非可視對象的事件

但是相反的過程不起作用。即當我選擇某個按鈕,並嘗試通過在高度,寬度textinput中輸入某個值來更改其尺寸時,尺寸不會更改。

如何知道我選擇了哪個按鈕?這裏如何處理事件?


private void Form1_Load(object sender, System.EventArgs e) 
     { 
      //Create some data and bind it to the grid 
      dt1 = GetData(1000, 3); 
      this.UltraGrid1.DataSource = dt1; 
      //Set the grid's CreationFilter to a new instance of the NumbersInRowSelectors class. 
      this.UltraGrid1.CreationFilter = new NumbersInRowSelectors();   
     } 

     private void UltraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e) 
     {  
      //Hide the default images that are drawn in the RowSelectors, like the pencil and asterisk, etc. 
      e.Layout.Override.RowSelectorAppearance.ImageAlpha = Infragistics.Win.Alpha.Transparent; 

      //Center the text in the RowSelectors. 
      e.Layout.Override.RowSelectorAppearance.TextHAlign = Infragistics.Win.HAlign.Center; 
      e.Layout.Override.RowSelectorAppearance.TextVAlign = Infragistics.Win.VAlign.Middle;   

      //There is no wy to change the width of the RowSelectors. 
      //Use a smaller font, so that 3-digit numbers will fit. 
      e.Layout.Override.RowSelectorAppearance.FontData.Name = "Small Fonts"; 
      e.Layout.Override.RowSelectorAppearance.FontData.SizeInPoints = 6; 
     } 

     //The NumbersInRowSelectors class. This class Implements a CreationFilter and 
     //adds a TextUIElement to each RowSelector which displays the row number of 
     //the row. 
     public class NumbersInRowSelectors:Infragistics.Win.IUIElementCreationFilter 
     { 

      #region Implementation of IUIElementCreationFilter 
      public void AfterCreateChildElements(Infragistics.Win.UIElement parent) 
      { 
       //Don't need to do anything here 
      } 
      public bool BeforeCreateChildElements(Infragistics.Win.UIElement parent) 
      { 
       //Declare some variables 
       Infragistics.Win.TextUIElement objTextUIElement; 
       Infragistics.Win.UltraWinGrid.RowSelectorUIElement objRowSelectorUIElement; 
       Infragistics.Win.UltraWinGrid.UltraGridRow objRow; 
       int RowNumber; 

       //Check to see if the parent is a RowSelectorUIElement. If not, 
       //we don't need to do anything 
       if (parent is Infragistics.Win.UltraWinGrid.RowSelectorUIElement) 
       { 
        //Get the Row from the RowSelectorsUIElement 
        objRowSelectorUIElement = (Infragistics.Win.UltraWinGrid.RowSelectorUIElement)parent; 
        objRow = (Infragistics.Win.UltraWinGrid.UltraGridRow)objRowSelectorUIElement.GetContext(typeof(Infragistics.Win.UltraWinGrid.UltraGridRow)); 

        //Get the Index of the Row, so we can use it as a row number. 
        RowNumber = objRow.Index; 

        //Check to see if the TextUIElement is already created. Since 
        //The RowSelectorsUIElement never has children by default, we 
        //can just check the count. 
        if (parent.ChildElements.Count == 0) 
        { 
         //Create a new TextUIElement and parent it to the RowSelectorUIElement 
         objTextUIElement = new Infragistics.Win.TextUIElement(parent, RowNumber.ToString()); 
         parent.ChildElements.Add(objTextUIElement); 
        } 
        else 
        { 
         //There's already a TextUIElement here, so just set the Text 
         objTextUIElement = (Infragistics.Win.TextUIElement)parent.ChildElements[0]; 
         objTextUIElement.Text = RowNumber.ToString(); 
        } 
        //Position the TextUIElement into the RowSelectorUIElement 
        objTextUIElement.Rect = parent.RectInsideBorders; 

        //Return True let the grid know we handled this event. 
        //This doesn't really do anything, since the grid 
        //does not create any child elements for this object, anyway. 
        return true; 
       } 

       //Return false to let the grid know we did not handle the event. 
       //This doesn't really do anything, since the grid 
       //does not create any child elements for this object, anyway. 
       return false;    
      }  
      #endregion 
     } 

    } 
+3

您可以發佈組件的代碼,並在選擇按鈕時彈出的textinput?這會讓你更容易給你特定的代碼。 –

+0

我想你已經錯過了一些東西,你發佈了一個非可視化的問題,但你給了按鈕(一個可視化組件)。發佈示例代碼很容易幫助 – Exhausted

回答

0

在按鈕和文本編輯聲明的類創建一個「當前選中的項目」的成員。

在按鈕選擇事件偵聽器中將事件目標分配給此成員。然後在文本編輯事件偵聽器中使用它。 例如:

// It's a declaration of the member variable 
private var m_current_btn:Button = null; 

// It's an event listener for your button 
private function on_selection_change(event:Event):void 
{ 
    m_current_btn = event.target as Button; 
    // button_x and button_y are two text edits 
    button_x.text = m_current_button.x.toString(); 
    button_y.text = m_current_button.y.toString(); 
} 

// Event listener to track changes in the coordinate text inputs 
private function on_coordinate_textedit_change(event:Event):void 
{ 
    if (m_current_btn != null) 
    { 
    m_current_btn.x = parseInt(button_x.text); 
    m_current_btn.y = parseInt(button_y.text); 
    } 
} 
相關問題