|
|
Rank: Advanced Member Groups: Member
Joined: 3/3/2008 Posts: 47 Points: 141
|
Hi,
We let the user to add text to the multilayer viewer by using textVobject and TextVObjectCreateDesigner
What we would like to do is select the newly added textBObject once it's added to the MLV.
We tried the code _mlvMain_LayerChanged If TypeOf e.VObject Is Aurigma.GraphicsMill.WinControls.TextVObject Then If e.ChangeType = Aurigma.GraphicsMill.WinControls.LayerChangeType.ObjectAdded And ManualAddText Then _mlvMain.CurrentDesigner = _mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1).Designer
But, we will have error by doing this...Please advice.
|
|
Rank: Advanced Member Groups: Administration
, Member
Joined: 1/31/2005 Posts: 386 Points: 403
|
Hi, You code looks good - it should work if there are no mistakes with "ManualAddText" and "Layer_Design" variables or properties. Could you provide us with more detailed information about error? For now I can just recommend you to use e.VObject.Designer property directly - something like that: Code:
If ManualAddText Then
_mlvMain.CurrentDesigner = e.VObject.Designer
End If
Best wishes, Alex.
|
|
Rank: Advanced Member Groups: Member
Joined: 3/3/2008 Posts: 47 Points: 141
|
Hi, Here is the full code. Even this line won't help. This will lead me to error. Quote:System.NullReferenceException was unhandled Message="Object reference not set to an instance of an object." Source="Aurigma.GraphicsMill.WinControls.VectorObjects" StackTrace: at Aurigma.GraphicsMill.WinControls.ClickDragCreateDesigner.NotifyMouseUp(MouseEventArgs e) at Aurigma.GraphicsMill.WinControls.MultiLayerViewer.OnMouseUp(MouseEventArgs e) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at Aurigma.GraphicsMill.WinControls.MultiLayerViewer.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(ApplicationContext context) at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) at Stories.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
Code: Private Sub _mlvMain_LayerChanged(ByVal sender As Object, ByVal e As Aurigma.GraphicsMill.WinControls.LayerChangedEventArgs) Handles _mlvMain.LayerChanged Const ProcedureName = "_mlvMain_LayerChanged"
If _ChangingObj Then Exit Sub End If
1: Try 2: If Not ((e.Layer.Name = "Indicator") Or (e.Layer.Name = "Frame")) Then 3: If TypeOf e.VObject Is Aurigma.GraphicsMill.WinControls.TextVObject Then 4: If e.ChangeType = Aurigma.GraphicsMill.WinControls.LayerChangeType.ObjectAdded And ManualAddText Then 11: If (_mlvMain.Layers(Layer_Design).VObjects.Count - 1) >= 0 Then 12: If TypeOf _mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1) Is Aurigma.GraphicsMill.WinControls.TextVObject Then 13: _mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1).SupportedActions(Aurigma.GraphicsMill.WinControls.VObjectAction.ChangeTextArea).Enabled = True 14: _mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1).SupportedActions(Aurigma.GraphicsMill.WinControls.VObjectAction.Resize).Enabled = False 15: _mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1).SupportedActions(Aurigma.GraphicsMill.WinControls.VObjectAction.Rotate).Enabled = False 16: frmMain.UpdateFontCbo(DirectCast(_mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1), Aurigma.GraphicsMill.WinControls.TextVObject).Font.Name, DirectCast(_mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1), Aurigma.GraphicsMill.WinControls.TextVObject).Font.Size) 17: frmMain.UpdateFontAlignment(DirectCast(_mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1), Aurigma.GraphicsMill.WinControls.TextVObject).Format.Alignment) 18: frmMain.UpdateFontLineAlignment(DirectCast(_mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1), Aurigma.GraphicsMill.WinControls.TextVObject).Format.LineAlignment) 19: frmMain.UpdateFontStyle(DirectCast(_mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1), Aurigma.GraphicsMill.WinControls.TextVObject).Font) 20: _mlvMain.Layers(Layer_Design).VObjects(_mlvMain.Layers(Layer_Design).VObjects.Count - 1).Tag = pzObj 21: End If 22: End If _ChangingObj = True ManualAddText = False _mlvMain.CurrentDesigner = e.VObject.Designer 23: Else 24: End If 25: End If
26: PageEdited = True 27: ManualAddText = False _ChangingObj = False 28: End If
29: Catch ex As Exception 30: WriteErrLog(Err.Number, Err.Source, Err.Description, gstrModule, ProcedureName, Err.Erl) 31: Finally 32: End Try End Sub
|
|
Rank: Advanced Member Groups: Administration
, Member
Joined: 1/31/2005 Posts: 386 Points: 403
|
Hello, I have found the reason. TextVObject designer cannot be detached from the host control before finishing work. So the code should delay designer switching a little. Here is small code in the attachment which demonstrates the idea. File Attachment(s):
MLV_TextSelection_VB.zip (12kb) downloaded 5 time(s).
Best wishes, Alex.
|
|
Rank: Advanced Member Groups: Member
Joined: 6/22/2008 Posts: 11 Points: 33
|
I'm doing exactly this in my app, here's my code that works, it's not complicated, (I run very much on the KISS principle). Set the currentdesigner to the objects designer immediately after you add it to the layer. Code: void MLV_Click(object sender, EventArgs e) { if (this.CreateText) { MouseEventArgs m = (MouseEventArgs)e; Aurigma.GraphicsMill.WinControls.TextVObject textObject = new Aurigma.GraphicsMill.WinControls.TextVObject(); textObject.Text = "Double click to edit";
textObject.TextArea = new RectangleF((float)m.X, (float)m.Y, (float)200, (float)100); this.CurrentLayer.VObjects.Add(textObject); this.CurrentDesigner = textObject.Designer; this.CreateText = false; } }
I've found using the vObjectCreateDesigner functions don't really give me the desired effect, and this method just works. The user clicks a toolbar button which sets the createtext flag on the MLV, then when they click on the MLV this code places a Textbox there, selected ready for them to do whatever they like. HTH.
|
|
Rank: Advanced Member Groups: Administration
, Member
Joined: 1/31/2005 Posts: 386 Points: 403
|
Hello,
I have to confirm that your solution conforms more with KISS rule. ;) I can recommend to use it in cases when there is no need in the setting text bounds first.
Best wishes, Alex.
|
|
|
Guest |