Asked by:
Windows.Forms.RadioButton crashes when I select the second button from a list

Question
-
Dear Windows,
I run this code (at the bottom) from within a host application (Revit). The code works perfectly from a windows command line (python radios.py). The behavior should be "when another radiobutton is checked, all others are uncheked", and inside of Revit, as I check the second button I get this crash.
Unhandled exception has occurred in a component in your application. If you click Continue, the application will ignore this error and attempt to continue.
Absolute path information is required.
"Details":
See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box. ************** Exception Text ************** System.ArgumentException: Absolute path information is required. at System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath) at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path) at System.Windows.Forms.Control.ControlVersionInfo.GetFileVersionInfo() at System.Windows.Forms.Control.ControlVersionInfo.get_CompanyName() at IronPython.NewTypes.System.Windows.Forms.RadioButton_22$22.#base#get_CompanyName() at Microsoft.Scripting.Interpreter.FuncCallInstruction`2.Run(InterpretedFrame frame) at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame) at Microsoft.Scripting.Interpreter.LightLambda.Run3[T0,T1,T2,TRet](T0 arg0, T1 arg1, T2 arg2) at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) at Microsoft.Scripting.Interpreter.FuncCallInstruction`5.Run(InterpretedFrame frame) at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame) at Microsoft.Scripting.Interpreter.LightLambda.Run3[T0,T1,T2,TRet](T0 arg0, T1 arg1, T2 arg2) at IronPython.Runtime.Types.BuiltinFunction.Call0(CodeContext context, SiteLocalStorage`1 storage, Object instance) at IronPython.Runtime.Types.ReflectedProperty.CallGetter(CodeContext context, PythonType owner, SiteLocalStorage`1 storage, Object instance) at IronPython.Runtime.Types.ReflectedProperty.TryGetValue(CodeContext context, Object instance, PythonType owner, Object& value) at IronPython.Runtime.Types.PythonType.TryGetNonCustomMember(CodeContext context, Object instance, String name, Object& value) at IronPython.Runtime.Operations.PythonOps.ObjectGetAttribute(CodeContext context, Object o, String name) at IronPython.Runtime.Operations.CustomTypeDescHelpers.GetPropertiesImpl(Object self, Attribute[] attributes) at IronPython.Runtime.Operations.CustomTypeDescHelpers.GetProperties(Object self) at System.ComponentModel.TypeDescriptor.MergedTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetProperties() at System.ComponentModel.TypeDescriptor.GetPropertiesImpl(Object component, Attribute[] attributes, Boolean noCustomTypeDesc, Boolean noAttributes) at System.Windows.Forms.RadioButton.PerformAutoUpdates(Boolean tabbedInto) at System.Windows.Forms.RadioButton.set_Checked(Boolean value) at IronPython.NewTypes.System.Windows.Forms.RadioButton_22$22.OnClick(EventArgs e) at System.Windows.Forms.RadioButton.OnMouseUp(MouseEventArgs mevent) at IronPython.NewTypes.System.Windows.Forms.RadioButton_22$22.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at IronPython.NewTypes.System.Windows.Forms.RadioButton_22$22.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
radios.py
# Windows utilities and IronPython stuff import clr clr.AddReference("System.Drawing") import System.Drawing as wdrawing clr.AddReference("System.Windows.Forms") import System.Windows.Forms as wforms class RoadRadioButton(wforms.RadioButton): def __init__(self, name, radios_collection): self.radios_collection = radios_collection self.Text = name self.MouseHover += self.onMouseHover self.MouseLeave += self.onMouseLeave self.CheckedChanged += self.checkedChanged print("init %s" % self.Text) def onMouseHover(self, sender, args): print("onMouseHover %s " % self.Text) def onMouseLeave(self, sender, args): print("onMouseLeave %s " % self.Text) def checkedChanged(self, sender, args): print("checkedChanged %s " % self.Text) for cb in self.radios_collection: if cb.Checked and cb != self: cb.Checked = False self.Checked = True class RadiosForm(wforms.Form): def __init__(self, *args, **kwargs): self.Text = "" if "title" not in kwargs else kwargs["title"] self.num = 1 if "num" not in kwargs else int(kwargs["num"]) self.AutoSize = True #self.Location = wdrawing.Point(20,20) print("init %s " % self.Text) # creation of a title l = wforms.Label() l.Text = "Init radio form: list of buttons:" l.AutoSize = True l.Location = wdrawing.Point(10, 10) self.lab_intro = l self.Controls.Add(self.lab_intro) # addition of all radios with events self.radios = list() self.groupbox = wforms.GroupBox() lineno, height = 20, 25 for i in range(1, self.num+1): rbname = "radio %d" % i print("\t\tprocessing %s" % rbname) rb = RoadRadioButton(rbname, self.radios) rb.Location = wdrawing.Point(30, lineno + height) rb.AutoCheck = True rb.AutoSize = True #self.radios.append(rb) self.groupbox.Controls.Add(rb) #self.Controls.Add(self.radios[len(self.radios)-1]) lineno += height self.Controls.Add(self.groupbox) # cancel button b = wforms.Button() b.Text = "Cancel" b.Height = 30 b.Width = 100 b.Location = wdrawing.Point(170,310) b.Click += self.close self.btn_cancel = b self.Controls.Add(self.btn_cancel) def close(self, sender=None, args=None): print(">>> closing %s" % self.Text) self.Dispose() f = RadiosForm(title="Radios Form", num=5) f.ShowDialog()
- Moved by Kyle Wang - MSFTMicrosoft contingent staff Friday, April 5, 2019 5:21 AM Iron Python related
- Edited by angelo.mastro Friday, April 5, 2019 1:40 PM
Thursday, April 4, 2019 3:33 PM
All replies
-
Hi angelo.mastro,
This forum discuss client application development using Windows Forms controls and features by using c#, and your issue is more related to Iron Python, I would suggest that you could post your feedback on the following link.
https://ironpython.net/support/
Best regards,
Kyle
MSDN Community Support
Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.- Proposed as answer by Kiodos Friday, April 5, 2019 5:28 AM
Friday, April 5, 2019 5:20 AM -
solved myself. apparently trouble started because I "dared" to make my own RadioButton() class, inheriting from the original MSFT Windows.Forms.RadioButton(). The original class works fine.Friday, April 5, 2019 1:42 PM