Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
NS100
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit f1a1121d
由
LN
编写于
2025-12-26 14:29:34 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
用一个PN有多行数据时弹框让用户选择。
1 个父辈
679fdeda
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
285 行增加
和
43 行删除
BLL/Extension/Item_General.cs
BLL/ExtraFileData.cs
SmartScan/Form/FrmMain.cs
SmartScan/Language/NS100.xlsx
SmartScan/Language/en-US.lngres
SmartScan/Language/ja-JP.lngres
SmartScan/Language/jn-JS.lngres
SmartScan/Language/zh-CN.lngres
SmartScan/SetControl/WPF/DataSelectControl.xaml
SmartScan/SetControl/WPF/DataSelectControl.xaml.cs
SmartScan/SmartScan.csproj
BLL/Extension/Item_General.cs
查看文件 @
f1a1121
...
...
@@ -302,7 +302,7 @@ namespace BLL
string
CleanData
=
key
[
Config
.
DataSource_DataKey
].
Replace
(
"<OCR>"
,
""
);
if
(
key
.
ContainsKey
(
Config
.
DataSource_DataKey
)
&&
ExtraFileData
.
AllData
.
ContainsKey
(
CleanData
))
{
var
extraData
=
ExtraFileData
.
AllData
[
CleanData
]
;
var
extraData
=
ExtraFileData
.
GetSelectDataSource
(
CleanData
)
;
findOk
=
true
;
foreach
(
var
d
in
extraData
)
{
...
...
@@ -321,7 +321,7 @@ namespace BLL
string
CleanData
=
key
[
oKey
].
Replace
(
"<OCR>"
,
""
);
if
(
key
.
ContainsKey
(
oKey
)
&&
ExtraFileData
.
AllData
.
ContainsKey
(
CleanData
))
{
var
extraData
=
ExtraFileData
.
AllData
[
CleanData
]
;
var
extraData
=
ExtraFileData
.
GetSelectDataSource
(
CleanData
)
;
findOk
=
true
;
foreach
(
var
d
in
extraData
)
{
...
...
@@ -886,34 +886,34 @@ namespace BLL
}
}
private
void
GetDataButtonClick
(
object
sender
,
EventArgs
e
)
{
Dictionary
<
string
,
string
>
valuePairs
=
new
Dictionary
<
string
,
string
>();
try
{
string
datakey
=
Config
.
DataSource_DataKey
;
foreach
(
var
items
in
extensions
.
Where
(
a
=>
(
a
.
Type
==
"TextBox"
||
a
.
Type
==
"ComboBox"
)
&&
a
.
Key
==
datakey
))
{
string
value
=
items
.
Control
.
Text
;
var
data
=
ExtraFileData
.
AllData
[
value
];
foreach
(
var
item
in
data
)
{
var
ext
=
extensions
.
Where
(
a
=>
(
a
.
Type
==
"TextBox"
||
a
.
Type
==
"ComboBox"
)
&&
a
.
Key
==
item
.
Key
).
ToList
();
foreach
(
var
Control
in
ext
)
{
Control
.
Control
.
Text
=
item
.
Value
;
valuePairs
.
Add
(
Control
.
Key
,
item
.
Value
);
}
}
}
lastkey
=
valuePairs
;
}
catch
(
Exception
)
{
LogNet
.
log
.
Info
(
"GetDataButtonClick:请求本地文件数据替换出错!"
);
}
}
//
private void GetDataButtonClick(object sender, EventArgs e)
//
{
//
Dictionary<string, string> valuePairs = new Dictionary<string, string>();
//
try
//
{
//
string datakey = Config.DataSource_DataKey;
//
foreach (var items in extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == datakey))
//
{
//
string value = items.Control.Text;
//
var data = ExtraFileData.AllData[value];
//
foreach (var item in data)
//
{
//
var ext = extensions.Where(a => (a.Type == "TextBox" || a.Type == "ComboBox") && a.Key == item.Key).ToList();
//
foreach (var Control in ext)
//
{
//
Control.Control.Text = item.Value;
//
valuePairs.Add(Control.Key, item.Value);
//
}
//
}
//
}
//
lastkey = valuePairs;
//
}
//
catch (Exception)
//
{
//
LogNet.log.Info("GetDataButtonClick:请求本地文件数据替换出错!");
//
}
//
}
public
void
DrawTextBackground
(
Dictionary
<
string
,
string
>
key
)
{
if
(
extensions
!=
null
&&
extensions
.
Count
>
0
&&
!
extensions
[
0
].
Control
.
InvokeRequired
)
...
...
BLL/ExtraFileData.cs
查看文件 @
f1a1121
...
...
@@ -12,7 +12,10 @@ namespace BLL
{
public
class
ExtraFileData
{
public
static
Dictionary
<
string
,
Dictionary
<
string
,
string
>>
AllData
=
new
Dictionary
<
string
,
Dictionary
<
string
,
string
>>();
public
delegate
Dictionary
<
string
,
string
>
DataSelectDelegate
(
string
datakey
,
List
<
Dictionary
<
string
,
string
>>
dataList
);
public
static
event
DataSelectDelegate
DataSelectingEvent
;
public
static
Dictionary
<
string
,
List
<
Dictionary
<
string
,
string
>>>
AllData
=
new
Dictionary
<
string
,
List
<
Dictionary
<
string
,
string
>>>();
public
static
List
<
string
>
Titles
=
new
List
<
string
>();
public
static
List
<
string
>
DataTitle
=
new
List
<
string
>();
...
...
@@ -77,10 +80,21 @@ namespace BLL
keydata
=
datas
[
i
];
}
}
if
(!
string
.
IsNullOrEmpty
(
keydata
)
&&
!
AllData
.
ContainsKey
(
keydata
)
)
if
(!
string
.
IsNullOrEmpty
(
keydata
)
)
{
AllData
.
Add
(
keydata
,
rowdata
);
DataTitle
.
Add
(
keydata
);
List
<
Dictionary
<
string
,
string
>>
keyList
=
new
List
<
Dictionary
<
string
,
string
>>()
{
};
if
(
AllData
.
ContainsKey
(
keydata
))
{
keyList
=
AllData
[
keydata
];
keyList
.
Add
(
rowdata
);
AllData
[
keydata
]
=
keyList
;
}
else
{
keyList
.
Add
(
rowdata
);
AllData
.
Add
(
keydata
,
keyList
);
DataTitle
.
Add
(
keydata
);
}
}
}
...
...
@@ -148,12 +162,23 @@ namespace BLL
emptyrow
++;
}
}
if
(!
string
.
IsNullOrEmpty
(
keydata
)
&&
!
AllData
.
ContainsKey
(
keydata
))
if
(!
string
.
IsNullOrEmpty
(
keydata
))
{
AllData
.
Add
(
keydata
,
rowdata
);
DataTitle
.
Add
(
keydata
);
emptyrow
=
0
;
}
List
<
Dictionary
<
string
,
string
>>
keyList
=
new
List
<
Dictionary
<
string
,
string
>>()
{
};
if
(
AllData
.
ContainsKey
(
keydata
))
{
keyList
=
AllData
[
keydata
];
keyList
.
Add
(
rowdata
);
AllData
[
keydata
]
=
keyList
;
}
else
{
keyList
.
Add
(
rowdata
);
AllData
.
Add
(
keydata
,
keyList
);
DataTitle
.
Add
(
keydata
);
}
}
if
(
string
.
IsNullOrEmpty
(
keydata
))
emptyrow
++;
...
...
@@ -206,5 +231,26 @@ namespace BLL
return
Encoding
.
UTF8
;
}
}
public
static
Dictionary
<
string
,
string
>
GetSelectDataSource
(
string
dataKey
)
{
List
<
Dictionary
<
string
,
string
>>
aExtraData
=
ExtraFileData
.
AllData
[
dataKey
];
if
(
aExtraData
.
Count
==
1
)
{
return
aExtraData
[
0
];
}
else
{
if
(
DataSelectingEvent
==
null
)
{
return
aExtraData
[
0
];
}
LogNet
.
log
.
Info
(
"匹配到数据源:"
+
dataKey
+
" 共有 "
+
aExtraData
.
Count
+
"条数据,弹框让用户选择"
);
Dictionary
<
string
,
string
>
selecValue
=
DataSelectingEvent
?.
Invoke
(
dataKey
,
aExtraData
);
return
selecValue
;
}
}
}
}
SmartScan/Form/FrmMain.cs
查看文件 @
f1a1121
...
...
@@ -380,7 +380,7 @@ namespace SmartScan
monitor
.
Pause
=
false
;
};
wpfMenu
.
BtnTriggerIOClicked
+=
(
s
,
e
)
=>
{
{
scanWork
.
bendi
=
true
;
LogNet
.
log
.
Info
(
"按钮点击触发Work"
);
scanWork
.
isstart
=
false
;
...
...
@@ -827,9 +827,9 @@ namespace SmartScan
PnlExtension
.
Left
=
Width
-
PnlExtension
.
Width
-
12
;
PicShow
.
Width
=
PnlExtension
.
Left
-
PicShow
.
Left
-
6
;
BLLCommon
.
extension
.
Printing
+=
Extension_Printing
;
BLLCommon
.
extension
.
SaveRetrospect
+=
Extension_SaveRetrospect
;
BLLCommon
.
extension
.
SaveRetrospect
+=
Extension_SaveRetrospect
;
BLLCommon
.
extension
.
LoadPanel
(
PnlExtension
,
BLLCommon
.
macroKey
);
ExtraFileData
.
DataSelectingEvent
+=
ExtraFileData_DataSelectingEvent
;
//语言
CboLanguage
.
Items
.
AddRange
(
Language
.
Name
.
ToArray
());
CboLanguage
.
SelectedText
=
BLLCommon
.
config
.
Language
;
...
...
@@ -845,7 +845,7 @@ namespace SmartScan
// 设置窗体大小为屏幕宽度的四分之三,高度为屏幕高度
this
.
Size
=
new
Size
((
int
)(
screenBounds
.
Width
*
0.75
),
screenBounds
.
Height
);
if
(
CheckCamera
()
&&
CheckIOModule
())
{
BtnStart
.
Enabled
=
true
;
...
...
@@ -862,6 +862,35 @@ namespace SmartScan
changeBtnStartText
();
}
private
Dictionary
<
string
,
string
>
ExtraFileData_DataSelectingEvent
(
string
datakey
,
List
<
Dictionary
<
string
,
string
>>
dataList
)
{
//string key = "3635854-2";
//ExtraFileData_DataSelectingEvent(key, ExtraFileData.AllData[key]);
if
(
dataList
==
null
||
dataList
.
Count
==
0
)
return
null
;
if
(
dataList
.
Count
==
1
)
return
dataList
[
0
];
Func
<
Dictionary
<
string
,
string
>>
show
=
()
=>
{
var
dlg
=
new
DataSelectControl
(
datakey
,
dataList
);
bool
?
res
=
dlg
.
ShowDialog
();
if
(
res
.
HasValue
&&
res
.
Value
&&
dlg
.
SelectedData
!=
null
)
return
dlg
.
SelectedData
;
return
dataList
[
0
];
};
if
(
InvokeRequired
)
{
Dictionary
<
string
,
string
>
selected
=
null
;
Invoke
(
new
Action
(()
=>
selected
=
show
()));
return
selected
??
dataList
[
0
];
}
else
{
return
show
();
}
}
private
Dictionary
<
string
,
string
>
Extension_GetUIKeyWords
()
{
return
wpfControl
.
GetRecognitionData
();
...
...
SmartScan/Language/NS100.xlsx
查看文件 @
f1a1121
此文件类型无法预览
SmartScan/Language/en-US.lngres
查看文件 @
f1a1121
...
...
@@ -457,4 +457,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? Are you sure you want
Dialog_SureSaveSFields 是否要保存选中的字段? Save selected fields?
Dialog_NoValidParametersAvailable 没有可用的打印参数? No valid print parameters available?
Dialog_NoKeywordSelected 未选择关键字! No keyword selected!
Dialog_SelectDatasetTitle 数据集选择 Data Set Selection
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} matched multiple rows of data. Please select:
Dialog_WPF_Ok 确定 SURE
SmartScan/Language/ja-JP.lngres
查看文件 @
f1a1121
...
...
@@ -524,3 +524,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ
Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか?
NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません?
NoKeywordSelected 未选择关键字! キーワードが選択されていません!
Dialog_SelectDatasetTitle 数据集选择 データセット選択
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 複数行のデータがマッチしました。選択してください
Dialog_WPF_Ok 确定 確認
SmartScan/Language/jn-JS.lngres
查看文件 @
f1a1121
...
...
@@ -524,4 +524,8 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 選択されたフィ
Dialog_SureSaveSFields 是否要保存选中的字段? 選択されたフィールドを保存しますか?
NoValidParametersAvailable 没有可用的打印参数? 有効な印刷パラメータがありません?
NoKeywordSelected 未选择关键字! キーワードが選択されていません!
Dialog_SelectDatasetTitle 数据集选择 データセット選択
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 複数行のデータがマッチしました。選択してください
Dialog_WPF_Ok 确定 確認
SmartScan/Language/zh-CN.lngres
查看文件 @
f1a1121
...
...
@@ -554,3 +554,7 @@ Dialog_SureDeleteSFields 是否要删除选中的字段? 是否要删除选中
Dialog_SureSaveSFields 是否要保存选中的字段? 是否要保存选中的字段?
Dialog_NoValidParametersAvailable 没有可用的打印参数? 没有可用的打印参数?
Dialog_NoKeywordSelected 未选择关键字! 未选择关键字!
Dialog_SelectDatasetTitle 数据集选择 数据集选择
Dialog_SelectDatasetMessage {0} 匹配到多行数据,请选择: {0} 匹配到多行数据,请选择:
Dialog_WPF_Ok 确定 确定
SmartScan/SetControl/WPF/DataSelectControl.xaml
0 → 100644
查看文件 @
f1a1121
<Window x:Class="SmartScan.SetControl.WPF.DataSelectControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="520" Width="860"
WindowStartupLocation="CenterScreen"
WindowStyle="None" ResizeMode="NoResize" Topmost="True"
Background="#202020" Foreground="#f0f0f0" ShowInTaskbar="False">
<Grid Margin="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock x:Name="MsgCenter"
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="18" FontWeight="Bold" Foreground="#FFFFFF"
TextWrapping="Wrap" TextAlignment="Center"
Margin="0,0,0,12"/>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<WrapPanel x:Name="Container" ItemWidth="380" ItemHeight="Auto"/>
</ScrollViewer>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,16,0,0">
<Button x:Name="BtnOK" Width="160" Height="40" Click="BtnOK_Click"
Background="#0078D7" Foreground="#FFFFFF" BorderBrush="#005A9E" FontSize="16"/>
</StackPanel>
</Grid>
</Window>
SmartScan/SetControl/WPF/DataSelectControl.xaml.cs
0 → 100644
查看文件 @
f1a1121
using
MemoryRead
;
using
System
;
using
System.Collections.Generic
;
using
System.Data
;
using
System.Linq
;
using
System.Windows
;
using
System.Windows.Controls
;
namespace
SmartScan.SetControl.WPF
{
public
partial
class
DataSelectControl
:
Window
{
private
readonly
List
<
Dictionary
<
string
,
string
>>
_dataList
;
private
int
_selectedIndex
=
-
1
;
private
string
dataKey
=
""
;
public
Dictionary
<
string
,
string
>
SelectedData
{
get
;
private
set
;
}
public
DataSelectControl
(
string
datakey
,
List
<
Dictionary
<
string
,
string
>>
dataList
)
{
this
.
dataKey
=
datakey
;
InitializeComponent
();
Topmost
=
true
;
_dataList
=
dataList
??
new
List
<
Dictionary
<
string
,
string
>>();
MsgCenter
.
Text
=
string
.
Format
(
LanguageWwitchover
.
Dialog
(
"SelectDatasetMessage"
,
"{0} 匹配到多行数据,请选择:"
),
datakey
);
BtnOK
.
Content
=
LanguageWwitchover
.
Dialog
(
"WPF_Ok"
,
"确定"
);
LoadLabels
();
if
(
_dataList
.
Count
>
0
&&
Container
.
Children
.
Count
>
0
&&
Container
.
Children
[
0
]
is
Label
first
)
SelectLabel
(
first
,
0
);
}
private
void
LoadLabels
()
{
Container
.
Children
.
Clear
();
if
(
_dataList
.
Count
<=
2
)
{
Container
.
ItemWidth
=
800
;
}
else
{
Container
.
ItemWidth
=
380
;
}
for
(
int
i
=
0
;
i
<
_dataList
.
Count
;
i
++)
{
var
label
=
CreateItemLabel
(
i
,
_dataList
[
i
]);
Container
.
Children
.
Add
(
label
);
}
}
private
Label
CreateItemLabel
(
int
index
,
Dictionary
<
string
,
string
>
data
)
{
var
tb
=
new
System
.
Windows
.
Controls
.
TextBlock
{
TextWrapping
=
TextWrapping
.
Wrap
,
Text
=
BuildDatasetText
(
data
),
Margin
=
new
Thickness
(
4
),
Foreground
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
234
,
234
,
234
)),
FontSize
=
14
};
var
lbl
=
new
Label
{
Content
=
tb
,
Padding
=
new
Thickness
(
10
),
Margin
=
new
Thickness
(
8
),
BorderBrush
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
102
,
102
,
102
)),
BorderThickness
=
new
Thickness
(
1
),
Background
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
48
,
48
,
48
)),
Cursor
=
System
.
Windows
.
Input
.
Cursors
.
Hand
,
Tag
=
index
,
Width
=
380
,
};
lbl
.
MouseLeftButtonUp
+=
(
s
,
e
)
=>
SelectLabel
((
Label
)
s
,
(
int
)
lbl
.
Tag
);
return
lbl
;
}
private
void
SelectLabel
(
Label
lbl
,
int
index
)
{
_selectedIndex
=
index
;
foreach
(
var
child
in
Container
.
Children
)
{
if
(
child
is
Label
l
)
{
l
.
Background
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
48
,
48
,
48
));
l
.
BorderBrush
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
102
,
102
,
102
));
}
}
lbl
.
Background
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
0
,
120
,
215
));
lbl
.
BorderBrush
=
new
System
.
Windows
.
Media
.
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromRgb
(
0
,
120
,
215
));
}
private
string
BuildDatasetText
(
Dictionary
<
string
,
string
>
data
)
{
var
parts
=
new
List
<
string
>();
foreach
(
var
kv
in
data
)
{
parts
.
Add
(
$
"{kv.Key}: {kv.Value}"
);
}
return
string
.
Join
(
"\n"
,
parts
);
}
private
void
BtnOK_Click
(
object
sender
,
RoutedEventArgs
e
)
{
if
(
_selectedIndex
>=
0
&&
_selectedIndex
<
_dataList
.
Count
)
{
SelectedData
=
_dataList
[
_selectedIndex
];
LogUtil
.
info
(
"用户选择了数据集: "
+
dataKey
+
", "
+
BuildDatasetText
(
SelectedData
));
DialogResult
=
true
;
}
else
{
DialogResult
=
false
;
}
}
}
}
SmartScan/SmartScan.csproj
查看文件 @
f1a1121
...
...
@@ -252,6 +252,9 @@
<Compile Include="SetControl\WPF\Convent\IsAutoIdFieldConverter.cs" />
<Compile Include="SetControl\WPF\Convent\OcrTextHighlighterConverter.cs" />
<Compile Include="SetControl\WPF\Convent\WidthMinusMarginConverter.cs" />
<Compile Include="SetControl\WPF\DataSelectControl.xaml.cs">
<DependentUpon>DataSelectControl.xaml</DependentUpon>
</Compile>
<Compile Include="SetControl\WPF\ImageViewerControl.xaml.cs">
<DependentUpon>ImageViewerControl.xaml</DependentUpon>
</Compile>
...
...
@@ -605,6 +608,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="SetControl\WPF\DataSelectControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="SetControl\WPF\ImageViewerControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论