一連の記事
[C#] ナンバー ジェネレーター (注文番号ルール、固定文字、シリアル番号、業務注文番号の定義)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/129129787
[C#] 日付範囲ジェネレーター (開始日、終了日)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/129040663
[C#] コンポーネントベースの開発、dll コンポーネント メソッドの呼び出し
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/129492112
[C#] データ エンティティ クラスの使用
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/128816638
[C#] ドキュメント承認フロー スキーム
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/128972545
[C#] バーコード管理操作マニュアル
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/126589496
[C#] IIS プラットフォームでの WebAPI 公開と例外処理
: https://blog.csdn.net/youcheng_ge/article/details/126539836
[C#] コード テンプレート生成ツール
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/126890673
[C#] MySQL データベース インポート ツール (Excel のバッチ挿入)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/126427323
【C#】簡単QRコード作成・印刷ツール
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/126884228
[C#] 最も完全なドキュメント印刷 (印刷テンプレート、バーコードと QR コード、フォント スタイル、プロジェクト ソース コード)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/129415723
[C#] Windows サービス (Service) のインストールと起動停止ソリューション
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/124053794
[C#] セッション分離の浸透、サービス呼び出し外部プログラム (フォーム インターフェイス ソリューションなし)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/124053033
[C#] Quartz クラスを使用したタスク プランの実装
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/123667723
[C#] ソース コードの正規表現の解析
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/118337074
[C#] ソフトウェア バージョンとファイル MD5 レコード (XML 操作)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/112513871
[C#] ネットワークが接続されているかどうかをテストする
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/110137288
【C#】名前に従ってコードを取得する(辞書取得キーメソッド)
この記事へのリンク:https ://blog.csdn.net/youcheng_ge/article/details/129816701
[C#] データモデリング、DataTable または List を使用しますか?
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/129792726
[C#] GridControl コントロールとデータセット間の双方向バインディング
[C#] GridControl による DataSource の動的置換、データ クエリ例外処理
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/130305424
[C#] GridControl の日付フィールドに時間、分、秒が表示される
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/130718303
[C#] GridControl は選択列を追加します (2 回目のクリックは必要ありません)
リンクをこの記事に追加します: https://blog.csdn.net/youcheng_ge/article/details/130763713
[C#] データベース チェック ツール (クロスライブラリ アクセス)
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/97172329
[C#] コード分析 – 印刷データセット
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/131431829
[C#] コード分析 – メソッド関数全体をインターセプトする
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/109817809
[C#] リフレクション機構、クラスファイルの動的ロード
この記事へのリンク: https://blog.csdn.net/youcheng_ge/article/details/131435110
記事ディレクトリ
序文
私は世界全体を抽象化できますが、あなたを抽象化することはできません。あなたをプライベート定数にして、外部関数があなたにアクセスできないようにしたいと考えています。また、私はあなたに、生涯を通じてあなたに電話できるように、世界的な不変者になってほしいと思っています。世界にそのような一定のものが存在しないのは残念です、そしてあなたは私の心の中で非常に具体的であるため、私はあなたを定義することができません。
皆さん、こんにちは。このコラムは [プロジェクトの実戦] コラムであり、[基礎となるライブラリ] コラムとは異なります。「問題の説明」と「プロジェクトの表示」の章が追加されていることがわかります。プロジェクトの開発プロセスを示し、読者がプロジェクト、解決すべき問題、製品が達成できる効果をより明確に理解できるようにします。このコラムには、プロジェクト開発プロセスの解決策が含まれています。これは、私のプロジェクト開発のための比較的成熟した信頼できる手法を改良したものです。これらの問題の解決策を整理し、皆さんと共有するためにこの記事を書きます。同様の問題が発生した場合は、次のことができます。この記事の解決策に従って対処してください。
このコラムは今後も更新および改善されていく予定ですが、コラム記事間の関連性は弱いです (記事間の依存関係が弱く、読む順序はありません)。ご質問がございましたら、プライベートメッセージをお送りください。このコラムに興味がある方は、ぜひ注目してください。最も簡潔なコードを使用して複雑な関数を実現する方法を説明します。
·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。
1. 問題の説明
私たちは大まかな方向性を決定し、事業部門とコミュニケーションを図り、さらに次の目標をサポートするラベルが必要であると判断しました。
①会社には機密保持の要件があり、ラベルは製品情報を表示するのには不便ですが、特定の担当者には理解できるものです。
②シリアル番号は手動で確認する必要があり、識別できない場合には手動による介入を防ぐための二重の保証が必要です。
2、解決策
2.1 実現可能性の分析
2.2 導入計画
3. ソフトウェア開発(ソースコード)
3.1 画像を開く方法
//函数内容: 函数方法,默认 打开图片
//函数版本: 0.0.0.0
//修改时间: 2023.07.11
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void DefaultOpenImage(string filePathName)
{
//建立新的系统进程
System.Diagnostics.Process process = new System.Diagnostics.Process();
//设置图片的真实路径和文件名
process.StartInfo.FileName = filePathName;
//设置进程运行参数,这里以最大化窗口方法显示图片。
process.StartInfo.Arguments = "rundl132.exe C://WINDOWS//system32//shimgvw.dll,ImageView_Fullscreen";
//此项为是否使用Shell执行程序,因系统默认为true,此项也可不设,但若设置必须为true
process.StartInfo.UseShellExecute = true;
//此处可以更改进程所打开窗体的显示样式,可以不设
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.Start();
process.Close();
}
3.2 画像表示メソッド(呼び出しメソッド)
//函数内容: 函数方法,查看图片
//函数版本: 0.0.0.0
//修改时间: 2023.07.11
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void ShowImage(string str_FileAddress)
{
try
{
if (string.IsNullOrEmpty(str_FileAddress)
|| str_FileAddress == BaseConst.STRING_NULL)
{
MessageBox.Show("没有照片,可以查看!");
return;
}
string str_FileName = Path.GetFileName(str_FileAddress);
string str_TargetFile = Path.Combine(Str_DefaultDirectory, str_FileName);
if (File.Exists(str_TargetFile)) //存在直接打开
{
DefaultOpenImage(str_TargetFile);
}
else //不存在服务器下载
{
BaseSuperMessage SuperMsg = new BaseSuperMessage(通用消息.文件下载);
SuperMsg.Append("File", str_FileAddress);
BaseNetClient.SendSuperMessage(SuperMsg);
}
}
catch (Exception ex)
{
BaseHMI.Display("样品数据 ShowImage", ex);
}
}
3.3 ファイルダウンロード方式メッセージ処理(ネットネットワーク委託)
//函数内容: 通用消息处理
//函数版本: 0.0.0.0
//修改时间: 2023.04.17
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
public void BaseNetClient_SuperMessageAnalyzeAsClient_Event(object o)
{
try
{
//信息初始化
ErrorMessage ErrMsg = new ErrorMessage();
BaseSuperMessage SuperMsg = o as BaseSuperMessage;
//根据消息种类分别处理
switch (SuperMsg.SN)
{
case 通用消息.文件下载:
try
{
//显示 失败信息
if (SuperMsg.Data[0].Name == BaseConst.MESSAGE_FAIL)
{
ErrMsg.Message = SuperMsg.Data[0].Value;
BaseHMI.ShowWarn(ErrMsg);
break;
}
//返回数据
string str_File = SuperMsg.FileList[0];
string str_FileName = Path.GetFileName(str_File);
string str_TargetFile = Path.Combine(Str_DefaultDirectory, str_FileName);
if (!File.Exists(str_TargetFile))
{
File.Copy(str_File, str_TargetFile, true);
}
if (b_DefaultOpen)
{
DefaultOpenImage(str_TargetFile);
}
}
catch (System.Exception ex)
{
BaseHMI.Display("SN = " + 通用消息.文件下载.ToString() + " 文件下载请求应答处理", ex);
BaseHMI.ShowWarn("软件报错, 请通知管理员!");
}
break;
default:
break;
}
//消息应答通用处理
BaseNetClient.SendOver(SuperMsg);
//记录消息
BaseHMI.Display(BaseVal.MessageCaption, SuperMsg);
}
catch (System.Exception ex)
{
BaseHMI.Display("通用消息分析 BaseNetClient_SuperMessageAnalyzeAsClient_Event", ex);
}
}
3.4 ファイルのダウンロード方法
//函数内容: 函数方法,文件下载
//函数版本: 0.0.0.0
//修改时间: 2023.07.11
//============================================================================================
//注意事项:
//1.
//2.
//============================================================================================
private void DownLoadFile(string str_FileAddress)
{
try
{
if (string.IsNullOrEmpty(str_FileAddress)
|| str_FileAddress == BaseConst.STRING_NULL)
{
MessageBox.Show("没有文件,可以下载!");
return;
}
XtraFolderBrowserDialog ofd = new XtraFolderBrowserDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Str_DefaultDirectory = ofd.SelectedPath;
//发送请求
BaseSuperMessage SuperMsg = new BaseSuperMessage(通用消息.文件下载);
SuperMsg.Append("File", str_FileAddress);
BaseNetClient.SendSuperMessage(SuperMsg);
}
}
catch (Exception ex)
{
BaseHMI.Display("样品数据 DownLoadFile", ex);
}
}
3.5 ファイルダウンロード呼び出し方法
//函数内容:右键菜单,按钮,下载断口前样照片
//函数版本: 0.0.0.1
//修改时间: 2023.07.11
//============================================================================================
//注意事项
// 1.
// 2.
//============================================================================================
private void Mi_DownPhoto1_Click(object sender, EventArgs e)
{
DataRow dr_Material = BaseGridControl_SampleData.GridView_Main.GetFocusedDataRow();
if (dr_Material != null)
{
string str_FileAddress = dr_Material[断口样检验数据表.断口前照片].ToString();
b_DefaultOpen = false;
DownLoadFile(str_FileAddress);
}
}
4. プロジェクト表示
サーバーを起動し、クライアントを起動します。
画像を見る: