SayehBanTools.Framework 1.3.5

dotnet add package SayehBanTools.Framework --version 1.3.5
                    
NuGet\Install-Package SayehBanTools.Framework -Version 1.3.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SayehBanTools.Framework" Version="1.3.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SayehBanTools.Framework" Version="1.3.5" />
                    
Directory.Packages.props
<PackageReference Include="SayehBanTools.Framework" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SayehBanTools.Framework --version 1.3.5
                    
#r "nuget: SayehBanTools.Framework, 1.3.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SayehBanTools.Framework@1.3.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SayehBanTools.Framework&version=1.3.5
                    
Install as a Cake Addin
#tool nuget:?package=SayehBanTools.Framework&version=1.3.5
                    
Install as a Cake Tool

SayehBanTools.Framework

NuGet Downloads .NET Framework WinForms

مجموعه‌ای از ابزارها و کامپوننت‌های کاربردی برای .NET Framework 4.8: از کنترل‌های آماده WinForms (جدول، صفحه‌بندی، تکست‌باکس هوشمند، کمبوباکس با جستجو) تا تاریخ شمسی، تبدیل عدد به حروف، رمزنگاری، اعتبارسنجی کد ملی، پیامک، Redis، RabbitMQ، Elasticsearch و هوش مصنوعی محلی (Ollama).


فهرست


نصب

dotnet add package SayehBanTools.Framework

یا از Package Manager Console:

Install-Package SayehBanTools.Framework

پیش‌نیاز: پروژه با هدف .NET Framework 4.8.


کامپوننت‌های WinForms

همه کنترل‌ها در فضای نام SayehBanTools.Framework.Utilities.win.component.CommonControls هستند. بعد از نصب پکیج و یک بار Build، در Toolbox ویژوال استودیو نمایش داده می‌شوند.

کنترل کاربرد
DGV DataGridView با شماره ردیف، رنگ یک‌درمیان، ذخیره و بازیابی ترتیب ستون‌ها و خروجی اکسل با دوبار کلیک روی هدر
DGVPagin همان DGV با نوار صفحه‌بندی داخلی و ستون انتخاب همه
SmartTextBox تکست‌باکس با حالت‌های متن، فقط حروف، عدد، مبلغ (جداکننده هزارگان) و تاریخ، به همراه Watermark
cmbbox کمبوباکس با جستجو، رنگ فوکوس و رفتن به کنترل بعدی با Enter
cmbboxDGV کمبوباکس با جستجوی ریموت (async) برای انتخاب از داده‌های زیاد
Btn دکمه گرد با افکت Glow و نماد ویژه
PanelGlass پنل شیشه‌ای با عنوان
PicBox / PicBoxShow پیکچرباکس با بارگذاری و دریافت تصویر به صورت byte[]

DGV

dgvItems.AlteraningColor = Color.Ivory;  // رنگ ردیف‌های یک‌درمیان
dgvItems.GONextCell = true;              // با Enter به سلول بعدی برود
dgvItems.DataSource = list;

dgvItems.RestoreColumnOrders();          // در Load فرم
dgvItems.SaveColumnOrders();             // در FormClosing

DGVPagin

DGVPagin خودش Dock = Fill می‌شود. برای جای‌گذاری آن را داخل یک Panel جداگانه قرار دهید.

dgvList.PageSize = 50;
dgvList.PageChanged += async (s, e) => await LoadPageAsync(e.PageNumber, e.PageSize);

private async Task LoadPageAsync(int page, int size)
{
    var result = await _service.GetPagedAsync(page, size);
    dgvList.DataSource = result.Items;
    dgvList.SetPagingInfo(result.TotalCount, page);
}

// اختیاری: ستون چک‌باکس با انتخاب همه در هدر
dgvList.EnableSelectAllCheckbox("colSelect");

SmartTextBox

txtPrice.InputType = SmartTextBox.TargetInputType.Money;
txtPrice.Watermark = "مبلغ (ریال)";

decimal price = decimal.Parse(txtPrice.UnformattedValue); // مقدار بدون جداکننده

txtDate.InputType = SmartTextBox.TargetInputType.Date;
txtDate.IsGregorianDate = false; // تاریخ شمسی

حالت‌های InputType: Normal، CharacterOnly، Numeric، Money، Date.

cmbboxDGV (جستجوی ریموت)

cmbProduct.RemoteSearchRequested += async text =>
    (await _products.SearchAsync(text)).Cast<object>();

if (cmbProduct.HasValidSelection())
{
    var product = (ProductDto)cmbProduct.SafeSelectedItem;
}

PicBox

picLogo.SetImageFromBytes(bytesFromDb);
byte[] bytes = picLogo.GetImageBytes();
picLogo.ClearImage();

PanelGlass

panelHeader.Title = "اطلاعات فاکتور";
panelHeader.TitleColor = Color.Navy;
panelHeader.TitleAlignment = HorizontalAlignment.Right;

ابزارهای کمکی WinForms

فضای نام: SayehBanTools.Framework.Utilities.win.Helper

// آیکن و عنوان فرم
this.SetAppIcon(iconBytes);
this.SetAppTitle("فروشگاه مرکزی");

// خروج با تأیید کاربر
if (SystemHelper.ConfirmExit()) SystemHelper.ExitApp();

// اعلان ویندوز
WindowsNotifier.Show("ذخیره", "فاکتور با موفقیت ثبت شد");

// خروجی اکسل از DataTable (نیازمند Microsoft Excel روی سیستم)
new ExportaExcel().Exporta(dataTable);

فرمت خودکار ستون‌های جدول در رویداد CellFormatting:

var config = new Dictionary<string, GridFormatConfig>
{
    ["colCreatedAt"] = new GridFormatConfig(1),                     // تاریخ و ساعت شمسی از UTC
    ["colInvoiceDate"] = new GridFormatConfig(2),                   // فقط تاریخ شمسی از UTC
    ["colIsActive"] = new GridFormatConfig(3, "فعال", "غیرفعال"),  // نمایش bool به صورت متن
};

private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    => DGV_Helper.ApplyGridFormatting(dgv, e, config);

تاریخ شمسی

فضای نام: SayehBanTools.Framework.ShowDateTime

string d1 = ConvertDateTime.MiladiToShamsi(DateTime.Now);              // 1405/08/16
DateTime d2 = ConvertDateTime.ShamsiToMiladi("1405/08/16");

// برای مقادیری که به صورت UTC ذخیره شده‌اند (به وقت ایران نمایش می‌دهد)
string d3 = ConvertDateTime.ConvertToPersianDateUTC(invoice.InvoiceDateUtc);
string d4 = ConvertDateTime.ConvertToPersianDateTimeUTC(invoice.InvoiceDateUtc);

string d5 = ConvertDateTime.miladi2shamsi(DateTime.Now);               // متن کامل با نام روز و ماه
string year = ConvertDateTime.GetCurrentYearPersion();

برای Dapper و JSON هم ManageDateAndTime.DateOnlyTypeHandler و ManageDateAndTime.DateOnlyJsonConverter (فضای نام Converter) آماده است.


رشته و عدد

using SayehBanTools.Framework.Converter;

"123".En2Fa();                 // ۱۲۳
"۱۲۳".Fa2En();                 // 123
"كيك".FixPersianChars();       // کیک (ی و ک عربی به فارسی)
"<b>سلام</b>".StripHtml();     // سلام
"Hello World".Slug();          // Hello-World
"   ".HasValue();              // false
"".NullIfEmpty();              // null
1250000m.ToCurrency("fa");     // جداکننده هزارگان

// عدد به حروف
ConvertNumbertToString.ConvertRaghamToHorof(1250);   // یک هزار و دویست و پنجاه
ConvertNumToString.convert("1250");

// IP
long n = "192.168.1.10".IPToNumber();
string ip = n.NumberToIPAddress();
bool ok = "10.0.0.1".IsValidIPAddress();

محاسبات

using SayehBanTools.Framework.Calc;

Calculator.Add(5, 10, 15);          // 30
Calculator.Multiply(2, 3, 4);       // 24
Calculator.Discount(1000m, 20);     // 800
Calculator.Taxation(1000m, 10);     // 1100
Calculator.GetPercent(250m, 1000m); // 25

تولید و اعتبارسنجی کد

using SayehBanTools.Framework.GenerateValue;

NationalCode.IsValidNationalCode("0012345679");       // اعتبارسنجی کد ملی
LegalNationalID.IsValidLegalNationalID("10101234567"); // شناسه ملی اشخاص حقوقی
string fake = NationalCode.GenerateRandom();           // کد ملی معتبر تصادفی (برای تست)
string code = GenerateValues.Generate16ValueRandome(); // رشته تصادفی ۱۶ رقمی

رمزنگاری و رشته اتصال

using SayehBanTools.Framework.Encryptor;
using SayehBanTools.Framework.ConnectionDB;

string enc = await StringEncryptor.EncryptAsync("secret", initVector, passPhrase);
string dec = await StringEncryptor.DecryptAsync(enc, initVector, passPhrase);

// رشته اتصال SQL Server (ساده یا با مقادیر رمزشده)
string cs = SqlServerConnection.ConnectionString(".", "MyDb", "sa", "pass");
string csEnc = await SqlServerConnection.ConnectionString(encServer, encDb, encUser, encPass, initVector, passPhrase);

داده و صفحه‌بندی

using SayehBanTools.Framework.Extensions;
using SayehBanTools.Framework.Utilities.Mapper;

// صفحه‌بندی روی IQueryable / IEnumerable
var page = products.ToPaged(page: 2, pageSize: 20, out int total);

// تبدیل لیست به DataTable (مثلاً برای Table-Valued Parameter در SQL Server)
DataTable tvp = ManageDataTable.ConvertToDataTable(items, "dbo.InvoiceDetailType");

شبکه و IP

using SayehBanTools.Framework.NetworkUtilities;
using SayehBanTools.Framework.AccessDenied;

bool online = new NetworkChecker().CheckInternetConnection();
string localIp = NetworkChecker.GetLocalIPAddress();
string publicIp = NetworkChecker.GetPublicIPAddress();

bool allowed = IPAccess.IsInRange("192.168.1.5", "192.168.1.1", "192.168.1.10");

پیامک

using SayehBanTools.Framework.Sender;

var data = new Dictionary<string, object> { ["code"] = "12345" };
var (response, content) = await SMS_System.SendPatternAsync(
    apiLink, apiKey, data, "pattern_code", "sender_number", "09120000000", null);

var credit = await SMS_System.GetCreditAsync(apiLink, apiKey);

هوش مصنوعی محلی (Ollama)

using SayehBanTools.Framework.AI.Ollama.llama;
using SayehBanTools.Framework.AI.Ollama.gemma;

using (var translator = new LocalAiTranslator("http://localhost:11434", "llama3"))
{
    await translator.InitializeAsync();
    string fa = await translator.TranslateAsync("Hello world", "en", "fa");
}

var vision = new LocalAiVisionAssistant("http://localhost:11434", "gemma3");
await vision.InitializeAsync();
string description = await vision.DescribeImageAsync(@"C:\images\product.jpg");

سرویس‌های زیرساختی

بخش کلاس‌ها
Redis ICache، RCache، CacheManager
RabbitMQ ISendMessages، RabbitMQMessageBus، RabbitMqConnectionSettings، ConfigureServicesRabbitMQ
Elasticsearch IElasticsearch، RElasticsearch، ElasticsearchIndexManager
ترجمه گوگل TranslateTexts.TranslateTextAsync(TranslationRequest)
فایل ManageFiles (آپلود معمولی و تکه‌ای، حذف، تبدیل تصویر به byte[] با تغییر اندازه)

نمونه RabbitMQ:

services.AddTransient<RabbitMQConnection>();
services.AddTransient<ISendMessages, RabbitMQMessageBus>();

await _messageBus.SendMessageAsync(message, "exchange_name", "queue_name");

Attributeهای اعتبارسنجی

فضای نام SayehBanTools.Framework.Validations.Attributes شامل Attributeهای آماده برای مدل‌هاست:

CommonPassword · Guid · HierarchyPath · IpAddressV4 · IpAddressV6 · PositiveNumberId · PositiveNumberIdArray · RowVersion

public class UserModel
{
    [CommonPassword("App_Data/worst-passwords.txt")]  // رد رمزهای عبور رایج و ضعیف
    public string Password { get; set; }

    [IpAddressV4]
    public string LastIp { get; set; }
}

وابستگی‌ها

Dapper · Newtonsoft.Json · Microsoft.Extensions.Options · Microsoft.Office.Interop.Excel · StackExchange.Redis · RabbitMQ.Client · Elastic.Clients.Elasticsearch · OllamaSharp · RestSharp · System.IO.Abstractions · System.Reactive.Windows.Forms


ارتباط

پیشنهاد، گزارش باگ و Pull Request در گیت‌هاب با کمال میل پذیرفته می‌شود.

Product Compatible and additional computed target framework versions.
.NET Framework net481 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.3.5 55 2026/11/9
1.3.4 52 2026/11/8
1.3.3 63 2026/11/6
1.3.2 81 2026/11/3
1.3.1 110 2026/10/26
1.3.0 102 2026/10/23
1.2.9 102 2026/10/20
1.2.8 103 2026/10/17
1.2.7 102 2026/10/11
1.2.6 101 2026/10/8
1.2.5 105 2026/10/6
1.2.4 101 2026/10/6
1.2.3 113 2026/10/5
1.2.2 102 2026/10/4
1.2.1 111 2026/10/4
1.2.0 96 2026/10/3
1.1.9 107 2026/10/3
1.1.8 113 2026/10/3
1.1.7 104 2026/10/1
1.1.6 97 2026/10/1
Loading failed