Is there a chance to imprive Python for .net to let "System.Windows.Forms.Form().Controls" be indexable?
Hi, here is the code: import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form,Application,Button form=Form() form.Controls.Add(Button()) print form.Controls[0] #this code didnt work with an error say "not indexable object" but this worked in ironpython,it seems in ironpython it treats the "form.Controls" as an list like object I can only get the form.Controls value use the "form.Controls.get_Item(0)" in the python for .net So is there a chance to imprive Python for .net to have that characteristic? thanks
Yes, this is well worth looking into. I may be able to get to this this weekend. Thank you. On 8/31/2011 10:30 PM, 刘振海 wrote:
Hi,
here is the code:
import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form,Application,Button form=Form() form.Controls.Add(Button()) print form.Controls[0] #this code didnt work with an error say "not indexable object"
but this worked in ironpython,it seems in ironpython it treats the "form.Controls" as an list like object I can only get the form.Controls value use the "form.Controls.get_Item(0)" in the python for .net So is there a chance to imprive Python for .net to have that characteristic?
thanks
_________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet
Very interesting; Apparently, Microsoft doesn't think that it is a useful thing to index directly into a System.Windows.Forms.Control.ControlCollection Class. The collection is still iterable in versions above 2.0, but the class no longer supports indexing. So:
print form.Controls[0] # works in pythondotnet built on .NET 2.0 on prior. <System.Windows.Forms.Button object at 0xaa8bc6c>
for ctrl in form.Controls: print ctrl # works in .NET 3.0 and above. Compare http://msdn.microsoft.com/en-us/library/system.windows.forms.control.control... with http://msdn.microsoft.com/en-us/library/system.windows.forms.control.control... and you'll see that all ICollection and IList properties have been removed. Reasons why are a good topic for future discussion. On 8/31/2011 10:30 PM, 刘振海 wrote:
Hi,
here is the code:
import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form,Application,Button form=Form() form.Controls.Add(Button()) print form.Controls[0] #this code didnt work with an error say "not indexable object"
but this worked in ironpython,it seems in ironpython it treats the "form.Controls" as an list like object I can only get the form.Controls value use the "form.Controls.get_Item(0)" in the python for .net So is there a chance to imprive Python for .net to have that characteristic?
thanks
_________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet
Here's a snippet that may help a little if you really need to get at a control that has been added to a parent control: import clr import System clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form, Button myBtnName = "button1" form1 = Form() def AddButton(form, btnName): btn = Button() btn.Name = btnName btn.Text = "Click Me" form.Controls.Add(btn) AddButton(form1, myBtnName) ctrls = form1.Controls.Find(myBtnName, False) btn = ctrls[0] if isinstance(btn, Button): print repr(btn) print btn.Name System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(form1) On 9/2/2011 8:17 PM, Barton wrote:
Very interesting; Apparently, Microsoft doesn't think that it is a useful thing to index directly into a System.Windows.Forms.Control.ControlCollection Class. The collection is still iterable in versions above 2.0, but the class no longer supports indexing. So:
print form.Controls[0] # works in pythondotnet built on .NET 2.0 on prior. <System.Windows.Forms.Button object at 0xaa8bc6c>
for ctrl in form.Controls: print ctrl # works in .NET 3.0 and above.
Compare http://msdn.microsoft.com/en-us/library/system.windows.forms.control.control... with http://msdn.microsoft.com/en-us/library/system.windows.forms.control.control... and you'll see that all ICollection and IList properties have been removed.
Reasons why are a good topic for future discussion.
On 8/31/2011 10:30 PM, 刘振海 wrote:
Hi,
here is the code:
import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form,Application,Button form=Form() form.Controls.Add(Button()) print form.Controls[0] #this code didnt work with an error say "not indexable object"
but this worked in ironpython,it seems in ironpython it treats the "form.Controls" as an list like object I can only get the form.Controls value use the "form.Controls.get_Item(0)" in the python for .net So is there a chance to imprive Python for .net to have that characteristic?
thanks
_________________________________________________ Python.NET mailing list -PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet
_________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet
participants (2)
-
Barton -
刘振海