Click here to Skip to main content
15,886,014 members
Home / Discussions / C#
   

C#

 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 0:24
professionalBillWoodruff12-Feb-18 0:24 
GeneralRe: How to manage dinamically generated user controls? Pin
OriginalGriff12-Feb-18 0:37
mveOriginalGriff12-Feb-18 0:37 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 2:00
professionalBillWoodruff12-Feb-18 2:00 
GeneralRe: How to manage dinamically generated user controls? Pin
OriginalGriff12-Feb-18 2:07
mveOriginalGriff12-Feb-18 2:07 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 5:44
professionalBillWoodruff12-Feb-18 5:44 
AnswerRe: How to manage dinamically generated user controls? Pin
BillWoodruff11-Feb-18 21:40
professionalBillWoodruff11-Feb-18 21:40 
GeneralRe: How to manage dinamically generated user controls? Pin
alin112-Feb-18 2:53
alin112-Feb-18 2:53 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 4:39
professionalBillWoodruff12-Feb-18 4:39 
I think you're doing fine. When a Control manages/hosts a set of other Controls, my preference is to keep the hosted controls (your 'Item) as "dumb" as possible, and to centralize their management by code in the container Control. So the 'Item might look like this:
C#
public ToDo()
{
    InitializeComponent();
    CbxDone = cbxDone;
    LblID = lblId;
    BtnClose = btnClose;
    TxtBx = textBox1;
}

public CheckBox CbxDone { set; get; }
public Label LblID { set; get; }
public Button BtnClose { set; get; }
public TextBox TxtBx { set; get; }
In the host container the 'Add button handler might look like this:
private void btnAdd_Click(object sender, EventArgs e)
{
    ToDo todo = new ToDo();
    currentToDos.Add(todo);  // a list of all hosted controls
    currentToDo = todo;      // current hosted vontrol

    todo.LblID.Text = (idCount).ToString();
    idCount++;

    // attach the EventHandlers
    todo.Enter += TodoOnEnter;
    todo.Leave += TodoOnLeave;

    todo.BtnClose.Click += BtnCloseOnClick;

    todo.CbxDone.CheckStateChanged += CbxDoneOnCheckStateChanged;
    
    todopanel.Controls.Add(todo);
    todo.Dock = DockStyle.Top;
    todo.BringToFront();

    this.ActiveControl = todo;
}
When you close one of the hosted controls"
currentToDos.Remove(currentToDo);
this.todopanel.Controls.Remove(currentToDo);
currentToDo.Dispose();

this.Invalidate();
I would keep track of the hosted controls in several ways: I might keep separate lists for completed tasks, incomplete tasks, selected tasks, and, I might even not destroy tasks, but either disable them while leaving them visible), or keep the ones removed from the display list in a list for future use. Your choices will depend on what you want your app to do, how you want to preserve the state of the controls and their data when the app closes, etc.

In production code, I would be concerned about making the hosted controls only accessible to the host, through design-time attributes like:

[DesignTimeVisible(false)]
public partial class ToDo : UserControl

And other techniques.
«... thank the gods that they have made you superior to those events which they have not placed within your own control, rendered you accountable for that only which is within you own control For what, then, have they made you responsible? For that which is alone in your own power—a right use of things as they appear.» Discourses of Epictetus Book I:12

GeneralRe: How to manage dinamically generated user controls? Pin
alin112-Feb-18 7:15
alin112-Feb-18 7:15 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 7:52
professionalBillWoodruff12-Feb-18 7:52 
GeneralRe: How to manage dinamically generated user controls? Pin
alin112-Feb-18 8:01
alin112-Feb-18 8:01 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 9:13
professionalBillWoodruff12-Feb-18 9:13 
GeneralRe: How to manage dinamically generated user controls? Pin
alin112-Feb-18 9:27
alin112-Feb-18 9:27 
GeneralRe: How to manage dinamically generated user controls? Pin
BillWoodruff12-Feb-18 17:54
professionalBillWoodruff12-Feb-18 17:54 
Questionsevenzipsharp password Pin
Member 1367023411-Feb-18 10:15
Member 1367023411-Feb-18 10:15 
AnswerRe: sevenzipsharp password Pin
Dave Kreskowiak11-Feb-18 11:01
mveDave Kreskowiak11-Feb-18 11:01 
GeneralRe: sevenzipsharp password Pin
BillWoodruff11-Feb-18 23:10
professionalBillWoodruff11-Feb-18 23:10 
GeneralRe: sevenzipsharp password Pin
Dave Kreskowiak12-Feb-18 2:30
mveDave Kreskowiak12-Feb-18 2:30 
AnswerRe: sevenzipsharp password Pin
BillWoodruff11-Feb-18 23:11
professionalBillWoodruff11-Feb-18 23:11 
SuggestionMessage Removed Pin
10-Feb-18 9:12
Markhoernchen10-Feb-18 9:12 
GeneralMessage Removed Pin
10-Feb-18 9:59
mveRichard MacCutchan10-Feb-18 9:59 
AnswerMessage Removed Pin
10-Feb-18 11:28
Markhoernchen10-Feb-18 11:28 
QuestionError with Primary key in Sql database Pin
Member 1367168610-Feb-18 7:32
Member 1367168610-Feb-18 7:32 
AnswerRe: Error with Primary key in Sql database Pin
Wendelius10-Feb-18 8:27
mentorWendelius10-Feb-18 8:27 
QuestionSplit a String of numbers in textfield Pin
auting829-Feb-18 11:06
auting829-Feb-18 11:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.