提问人:roy 提问时间:6/25/2022 最后编辑:roy 更新时间:6/27/2022 访问量:225
如何使用它在 vb.net 中添加内联值或多行字符串
how to use it to add in-lined values or multiline strings in vb.net
问:
我不知道创建一个多行字符串,请最好的解决方案。下面的代码并非都使用多行字符串。你可以看到我注释掉的代码是因为我不知道如何创建多行字符串。
Public Shared Function GetReceipt(ByVal transaction_Conflict As Transaction) As String
Return GenerateReceiptTemplate().Replace("<Orders/>", GetOrderRows(transaction_Conflict)).Replace("<Total/>", transaction_Conflict.Total.ToString() & "PHP").Replace("<Cash/>", transaction_Conflict.Cash.ToString() & "PHP").Replace("<Change/>", transaction_Conflict.Change.ToString() & "PHP").Replace("<Id/>", transaction_Conflict.Id).Replace("<Cashier/>", transaction_Conflict.GetCashier().Fullname).Replace("<Date/>", transaction_Conflict.Date.ToString())
End Function
Private Shared Function GetOrderRows(ByVal transaction_Conflict As Transaction) As String
Dim result As String = ""
transaction_Conflict.GetOrders().ForEach(Sub(item As Order)
result &= "<tr>"
result &= "<td>" & item.GetProduct().Name & "</td>"
result &= "<td align='center'>x " & item.Quantity & "</td>"
result &= "<td align='right'>" & item.Subtotal & "PHP</td>"
result &= "</tr>"
End Sub)
Return result
End Function
'code output in VB.NET
Private Shared Function GenerateReceiptTemplate() As String
Return "<center>" & vbCrLf &
"<font size='24px'><b>WcDonalds</b></font><br/>" & vbCrLf &
"<span>[email protected]</span>" & vbCrLf &
"</center>" & vbCrLf &
"<br/><br/>" & vbCrLf &
"<table width='100%'>" & vbCrLf &
"<thead>" & vbCrLf &
"<tr>" & vbCrLf &
"<th align='left'>Product Name</th>" & vbCrLf &
"<th align='center'>Quantity</th>" & vbCrLf &
"<th align='right'>Subtotal</th>" & vbCrLf &
"</tr>" & vbCrLf &
"</thead>" & vbCrLf &
"<tbody>" & vbCrLf &
"<Orders/>" & vbCrLf &
"</tbody>" & vbCrLf &
"</table>" & vbCrLf &
"<br/>" & vbCrLf &
"<center>---------------------------------------</center>" & vbCrLf &
"<br/>" & vbCrLf &
'Total: <b><Total/></b><br/>
'Cash: <b><Cash/></b><br/>
'Change: <b><Change/></b><br/>
' <br/>
'Transaction ID: #<Id/><br/>
'Cashier: <Cashier/><br/>
'Date: <Date/><br/>
' <br/>
' <center>---------------------------------------</center>
' <br/>
' <center><b>Thanks For visiting WcDonalds</b></center>
End Function
答:
您只需在多行上键入文字,第一行为左双引号,最后一行为右双引号。请注意,您需要将除第一行物理行之外的所有行都推到代码窗口的左侧,因为您包含的任何前导空格都将被视为 .例如String
String
Dim str = "First Line
Second Line
Third Line"
我不记得这个功能是什么时候引入的,所以它可能在 VB 2010 中不可用。在这种情况下,您仍然可以使用 XML 文字,例如
Dim str = <text>First Line
Second Line
Third Line</text>.Value
评论
你的 HTML 一团糟。这只是好一点。
Dim xe As XElement = <div>
<p style="text-align: center; font-size: 24px;font-weight:700;">WcDonalds</p>
<p style="text-align: center;">[email protected]</p>
<table style="width: 100%;">
<thead>
<tr>
<th style="width: 33.3%; text-align: left;">Product Name</th>
<th style="width: 33.3%; text-align: center;">Quantity</th>
<th style="width: 33.3%; text-align: right;">Subtotal</th>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 33.3%; text-align: left;">a product</td>
<td style="width: 33.3%; text-align: center;">1</td>
<td style="width: 33.3%; text-align: right;">$1.23</td>
</tr>
</tbody>
</table>
<br/>
<p style="text-align: center;">---------------------------------------</p>
<p>Total</p>
<p>Cash</p>
<p>Change</p>
<p style="text-align: center;">---------------------------------------</p>
<p style="text-align: center; font-weight:700;">Thanks For visiting WcDonalds</p>
</div>
Return xe.ToString
评论
文本可以保存为嵌入资源(文本文件)并从那里检索。这有助于使代码看起来更干净。
请尝试以下操作:
VS 2010年:
打开解决方案资源管理器
- 在 VS 菜单中,选择“视图”
- 选择“解决方案资源管理器”
打开属性窗口
- 在 VS 菜单中,选择“视图”
- 选择“属性”窗口
添加文件夹(名称:Templates)
- 在“解决方案资源管理器”中,右击“<项目名称>
- 选择“添加”
- 选择“新建文件夹”
- 键入所需的名称(例如:模板)
添加文本文件(名称:ReceiptTemplate.txt)
- 在“解决方案资源管理器”中,右键单击刚刚创建的新文件夹(例如:模板)
- 选择“添加”
- 选择新项目
- 展开 Common Items
- 单击“常规”
- 选择文本文件(名称:ReceiptTemplate.txt)
- 单击“添加”
设置文本文件的属性
- 在“解决方案资源管理器”中,单击添加的文本文件(例如:ReceiptTemplate.txt)
- 在“属性”窗口中,将“生成操作”设置为“嵌入资源”
将所需的文本添加到文本文件。例如:
收据模板.txt:
<center>
<font size='24px'>
<b>ABC Cafe</b>
</font>
<br/>
<span>[email protected]</span>
</center>
<br/>
<br/>
<table width='100%'>
<thead>
<tr>
<th align='left'>Product Name</th>
<th align='center'>Quantity</th>
<th align='right'>Subtotal</th>
</tr>
</thead>
<tbody>
<Orders/>
</tbody>
</table>
<br/>
<center>---------------------------------------</center>
<br/>
Total: <b><Total/></b><br/>
Cash: <b><Cash/></b><br/>
Change: <b><Change/></b><br/>
<br/>
Transaction ID: #<Id/><br/>
Cashier: <Cashier/><br/>
Date: <Date/><br/>
<br/>
<center>---------------------------------------</center>
<br/>
<center><b>Thanks For visiting ABC Cafe</b></center>
添加模块(名称:HelperLoadResource.vb)
'Notes:
' Need to set property Build Action: Embedded Resource For Each file that
' needs to be loaded
'
'Resources:
' https'stackoverflow.com/questions/3314140/how-to-read-embedded-resource-text-file
Imports System.Text
Imports System.IO
Imports System.Reflection
Module HelperLoadResource
Public Function ReadResource(filename As String) As String
Return ReadResource(filename, System.Text.Encoding.UTF8)
End Function
Public Function ReadResource(filename As String, fileEncoding As System.Text.Encoding) As String
Dim fqResourceName As String = String.Empty
Dim result As String = String.Empty
'get executing assembly
Dim execAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
'get resource names
Dim resourceNames As String() = execAssembly.GetManifestResourceNames()
If resourceNames IsNot Nothing AndAlso resourceNames.Length > 0 Then
For Each rName As String In resourceNames
If rName.EndsWith(filename) Then
fqResourceName = rName
Exit For
End If
Next
If String.IsNullOrEmpty(fqResourceName) Then
Throw New Exception(String.Format("Resource '{0}' not found.", filename))
End If
'get file text
Using s As Stream = execAssembly.GetManifestResourceStream(fqResourceName)
Using reader As StreamReader = New StreamReader(s, fileEncoding)
'read text
result = reader.ReadToEnd()
End Using
End Using
End If
Return result
End Function
End Module
注意:这也适用于较新版本的 Visual Studio,但“添加文本文件”中列出的某些步骤有所不同。
文件/文件夹结构应类似于以下内容:
用法:
Dim receiptTemplate As String = HelperLoadResource.ReadResource("ReceiptTemplate.txt")
资源:
好了,这里需要的就是生成和返回收据的第一个函数。我将使用相同的方法修改您上一个问题的答案,以从参数中获取值。XElement
transaction_Conflict
对于标签,将 用 括起来的对象中的相应值附加 。对于表部分,调用 in 方法以获取列表,并调用扩展方法创建行和单元格,如代码中所示。transaction_Conflict
<%= %>
transaction_Conflict.GetOrders()
<%= %>
.Select
Public Shared Function GetReceipt(ByVal transaction_Conflict As Transaction) As String
Return <html>
<center>
<font size='24px'><b>WcDonalds</b></font><br/>
<span>[email protected]</span>
</center><br/>
<table width='100%'>
<thead>
<tr>
<th align='left'>Product Name</th>
<th align='center'>Quantity</th>
<th align='right'>Subtotal</th>
</tr>
</thead>
<tbody>
<%= transaction_Conflict.GetOrders().Select(
Function(order)
Return _
<tr>
<td><%= order.GetProduct().Name %></td>
<td align='center'><%= order.Quantity %></td>
<td align='right'><%= order.SubTotal %></td>
</tr>
End Function) %>
</tbody>
</table>
<br/><hr/><br/>
Total: <b><%= transaction_Conflict.Total %> PHP</b><br/>
Cash: <b><%= transaction_Conflict.Cash %> PHP</b><br/>
Change: <b><%= transaction_Conflict.Change %> PHP</b><br/><br/>
Transaction ID: #<%= transaction_Conflict.Id %><br/>
Cashier: <%= transaction_Conflict.GetCashier().Fullname %>><br/>
Date: <%= transaction_Conflict.Date.ToString() %><br/><br/><hr/>
<center><b>Thanks For visiting WcDonalds</b></center>
</html>.ToString()
End Function
这在我的浏览器中生成如下内容:
评论
<td><%= order.ProductName %></td>
$
<td><%= order.GetProduct().Name %></td>
$
<td><%= order.GetProduct().Name %></td>
$
$
PHP
评论
vbCrLf
<br />
<p></p>