[Python.NET] Is there a chance to imprive Python for .net to let "System.Windows.Forms.Form().Controls" be indexable?
刘振海
1989lzhh at gmail.com
Sun Sep 4 05:31:32 CEST 2011
Hi Barton,
Thanks for your reply,I really appriciate!
Here is my thought:
在 2011年9月4日 上午3:35,Barton <barton at bcdesignswell.com>写道:
> **
> Yes, I agree that the Item Property is still there.
> It seems to be exposed ONLY FROM IEnumerator.GetEnumerator() or the
> Findxxx() functions provided by the class due to its virtual nature:
>
> public *virtual *Control this [ int index ] { get; }
>
* * I don't think the Item Property isn't exposed due to its virtual
nature. I did some test in C#,it turns out that the virtual modified Item
property can be accessed by python .net with the index manner .I noticed
there is a new function "get_Item" being add to the instance object. The
same new function "get_Item" can be find in the Form().Controls
but Form().Controls can not be indexable. It is wield.
I check the source code of python for .net and find this from
"classmanager.cs":
// Check for indexer
ParameterInfo[] args = pi.GetIndexParameters();
if (args.GetLength(0) > 0) {
Indexer idx = ci.indexer;
if (idx == null) {
ci.indexer = new Indexer();
idx = ci.indexer;
}
idx.AddProperty(pi);
continue;
}
Maybe the mechanism of checking for indexer is not perfect?
Thanks!
>
> Hope that helps
>
>
> On 9/3/2011 7:09 AM, 刘振海 wrote:
>
> Hi Barton,
> thanks for your reply.
> I have check the MSDN documents. It seems the Item properties both exist in
> .net2.0 and .net4.0
> here is the MSDN for
> http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection_properties%28VS.80%29.aspx
> [image: Public property] Item[Int32]<http://msdn.microsoft.com/en-us/library/333f9hk4.aspx> Indicates
> the Control<http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx> at
> the specified indexed location in the collection. [image: Public
> property] Item[String]<http://msdn.microsoft.com/en-us/library/s1865435.aspx> Indicates
> a Control<http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx> with
> the specified key in the collection.
> and I get the blew code from C#
> "
> public class ControlCollection : ArrangedElementCollection, IList,
> ICollection, IEnumerable, ICloneable {
> public virtual Control this[int index] { get; }
> public virtual Control this[string key] { get; }
> "
> In C# the Controls support index,So I think It will be intuitive for
> Controls to support index.
>
>
>
> 2011/9/3 Barton <barton at bcdesignswell.com>
>
>> 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.controlcollection_properties.aspx
>> with
>>
>> http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection_properties%28VS.80%29.aspx
>> 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 at python.org
>> http://mail.python.org/mailman/listinfo/pythondotnet
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pythondotnet/attachments/20110904/2d4e0ee1/attachment-0001.html>
More information about the PythonDotNet
mailing list