Hi,
I find that the Edit method of the TitleBlockDefinition needs to be called and the TextBox needs to come from the DrawingSketch that is being edited.
Here is an update to your code. This is from a .NET forms application. The logic for getting the correct TextBox may need to be improved but the code does show that changing the FormattedText property of a TextBox in a TitleBlockDefinition can work.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'WB added
Dim m_InventorApp As Inventor.Application = Nothing '= AddinGlobal.InventorApp '<- this gives me the Application
Try
m_InventorApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application")
Catch ex As Exception
End Try
Dim oTitleBlockED As TitleBlock
oTitleBlockED = m_InventorApp.ActiveDocument.ActiveSheet.TitleBlock
Dim dctPromptedEntries As Dictionary(Of String, TextBox)
dctPromptedEntries = GetPrompEntries(m_InventorApp)
' Dim strTubePattern As String = "Triangular"
Dim strTubePattern As String = "Square"
Dim strFormattedText As String
If UCase(strTubePattern) = "TRIANGULAR" Then
setTextBoxValues(dctPromptedEntries.Item("TRIANGULAR"), "TRIANGULAR", oTitleBlockED)
strFormattedText = dctPromptedEntries.Item("SQUARE").FormattedText
strFormattedText = Replace(strFormattedText, "<Prompt", "<StyleOverride Strikethrough='False'><Prompt")
strFormattedText = Replace(strFormattedText, "</Prompt>", "</Prompt></StyleOverride>")
dctPromptedEntries.Item("TRIANGULAR").FormattedText = strFormattedText
ElseIf UCase(strTubePattern) = "SQUARE" Then
setTextBoxValues(dctPromptedEntries.Item("SQUARE"), "SQUARE", oTitleBlockED)
strFormattedText = dctPromptedEntries.Item("SQUARE").FormattedText
' strFormattedText = Replace(strFormattedText, "<Prompt", "<StyleOverride Strikethrough='False'><Prompt")
'WB added - wanted to see the strike through in the text (worked ok)
strFormattedText = Replace(strFormattedText, "<Prompt", "<StyleOverride Strikethrough='True'><Prompt")
strFormattedText = Replace(strFormattedText, "</Prompt>", "</Prompt></StyleOverride>")
'WB added
Dim oTitleBlockDef As TitleBlockDefinition
oTitleBlockDef = m_InventorApp.ActiveDocument.TitleBlockDefinitions("Heat Exchanger")
Dim oSketch As DrawingSketch = Nothing
'Edit the TitleBlockDefinition, passing in a DrawingSketch that will be instantiated
Call oTitleBlockDef.Edit(oSketch)
Dim oTextBox As TextBox
'WB commented
' oTextBox = dctPromptedEntries.Item("SQUARE")
'WB added for each
'Go through the TextBoxes in in the Sketch being edited
For Each oTextBox In oSketch.TextBoxes
'Debug.Print(oTextBox.Text)
If oTextBox.Text.Contains("SQUARE") Then
'This works without error for me (TextBox is from DrawingSketch being edited)
oTextBox.FormattedText = strFormattedText
Exit For
End If
'WB commented
'dctPromptedEntries.Item("SQUARE").FormattedText = strFormattedText
Next oTextBox
oTitleBlockDef.ExitEdit(True)
End If
End Sub
Private Function GetPrompEntries(m_InventorApp As Inventor.Application) As Dictionary(Of String, TextBox)
Dim otextboxes As TextBoxes
Dim oTextBox As TextBox
Dim dctPromptEntries As New Dictionary(Of String, TextBox)
Dim oActiveDocument As DrawingDocument
oActiveDocument = m_InventorApp.ActiveDocument
Dim oTitleBlock As TitleBlock
oTitleBlock = oActiveDocument.ActiveSheet.TitleBlock
Dim strValue As String
If Not oTitleBlock Is Nothing Then
otextboxes = oTitleBlock.Definition.Sketch.TextBoxes
For Each oTextBox In otextboxes
strValue = Trim(oTextBox.Text)
If InStr(UCase(oTextBox.FormattedText), "</PROMPT>") <> 0 Then
If Not dctPromptEntries.ContainsKey(strValue) Then
dctPromptEntries.Add(strValue, oTextBox)
End If
ElseIf UCase(strValue) = "ELLIP" Or UCase(strValue) = "FLAT" Or UCase(strValue) = "DISH" _
Or UCase(strValue) = "CONIC" Or UCase(strValue) = "HEMISPH" Then
If Not dctPromptEntries.ContainsKey(strValue) Then
dctPromptEntries.Add(strValue, oTextBox)
End If
End If
Next
End If
Return dctPromptEntries
End Function
Public Sub setTextBoxValues(ByVal oTextbox As TextBox, strValue As String, oTitleBlockED As TitleBlock)
oTitleBlockED.SetPromptResultText(oTextbox, strValue)
End Sub
Thanks,
Wayne
Wayne Brill
Developer Technical Services
Autodesk Developer Network