تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
هل يمكن برمجه انتفيس winform بحيث يكون خريطه تفاعليه
#1
السلام عليكم ورحمه الله وبركاته
هل يمكن برمجه انتفيس  winform بحيث يكون خريطه مثلا مصر او السعوديه  بحيث تكون خريطه الدوله مقسمه الى مناطق بحيث عن الضغط على المنطقه بطلع لي ثافذه او فقاعه فيها بيانات المنطقه كعدد السكان ومميزات المنطقه. مثل الصوره المرفقه عند وضع الموشر على مصر يطلع لي بيانات


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#2
خطوة 1: استخدام مكتبة خرائط تفاعلية
خيار 1: استخدام مكتبة مثل GMap.NET
GMap.NET هي مكتبة مفتوحة المصدر تدعم إضافة خرائط تفاعلية إلى تطبيقات C#.
يمكن استخدامها لعرض النقاط أو العلامات (Markers) على الخريطة وعرض معلومات عند التفاعل معها.
خيار 2: استخدام مكتبات رسم مدمجة (Graphics)
إذا كانت الخريطة بسيطة كما في الصورة، يمكن رسمها يدويًا باستخدام كائنات Graphics في Windows Forms أو WPF.
يمكنك استخدام الأحداث مثل MouseMove و MouseClick لاكتشاف النقاط وإظهار المعلومات.
خطوة 2: إعداد المشروع
إعداد خريطة أساسية
أضف صورة خريطة كخلفية.
أضف النقاط (Markers) باستخدام دوائر صغيرة مرسومة يدويًا أو عناصر UI مثل الأزرار.

using System;
using System.Drawing;
using System.Windows.Forms;

public class MapForm : Form
{
public MapForm()
{
// إعداد الفورم
this.Text = "Interactive Map";
this.Size = new Size(800, 600);

// تحميل صورة الخريطة
PictureBox mapPictureBox = new PictureBox
{
Image = Image.FromFile("path_to_map_image.jpg"), // ضع مسار صورة الخريطة هنا
SizeMode = PictureBoxSizeMode.StretchImage,
Dock = DockStyle.Fill
};
this.Controls.Add(mapPictureBox);

// رسم النقاط على الخريطة
mapPictureBox.Paint += (s, e) =>
{
// رسم دائرة في مواقع معينة
e.Graphics.FillEllipse(Brushes.Red, new Rectangle(300, 200, 20, 20)); // دائرة
};

// إضافة Tooltip للنقطة
mapPictureBox.MouseMove += (s, e) =>
{
if (new Rectangle(300, 200, 20, 20).Contains(e.Location))
{
// عرض Tooltip
ToolTip tooltip = new ToolTip();
tooltip.SetToolTip(mapPictureBox, "Name: مصر\nمصاب: 285\nمتعافي: 39\nوفيات: 8");
}
};
}

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MapForm());
}
}
الرد }}}
تم الشكر بواسطة:
#3
نعم، يمكن برمجة واجهة WinForms باستخدام الخريطة التفاعلية كما تصف، حيث تكون الخريطة مقسمة إلى مناطق، وعند النقر أو تمرير المؤشر على منطقة معينة (مثل مصر أو منطقة داخل السعودية)، تظهر نافذة أو فقاعة تحتوي على بيانات تلك المنطقة.
الخطوات الرئيسية لإنشاء خريطة تفاعلية في WinForms:
1. إضافة صورة الخريطة:
  • استخدم صورة خريطة الدولة التي تحتوي على التقسيمات الإدارية (محافظات أو مناطق).
  • أضف الصورة إلى النموذج (WinForm) باستخدام عنصر PictureBox.
2. تقسيم الخريطة إلى مناطق (Hit Testing):
  • يمكن استخدام مكتبة لرسم خريطة تفاعلية مثل
    GMap.NET
  • .
  • أو يمكنك العمل باستخدام تقنية Region في C#:
    • تقسيم الصورة إلى مناطق باستخدام التنسيق Polygon (مضلعات تمثل كل منطقة).
    • تعيين كل منطقة على حدة باستخدام الكود.
3. التفاعل مع المناطق:
  • استخدم أحداث مثل:
      MouseMove
    • : للتحقق من المنطقة التي يكون عليها المؤشر حاليًا.
      MouseClick
    • : لتنفيذ عملية عند النقر على منطقة.
4. عرض البيانات:
  • عند تحديد المنطقة، يمكنك عرض البيانات باستخدام:
    • عنصر Tooltip.
    • نافذة منبثقة (
      MessageBox
    • أو
      Custom Form
    • ).
    • مربع نص أو لوحة (
      Panel
    • ) مخصصة على جانب الخريطة.

مثال عملي:
الكود الأساسي:
csharp
نسخ الكود
كود :
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

public partial class MapForm : Form
{
   // قائمة بالمناطق (المضلعات)
   private Dictionary<string, Region> regions = new Dictionary<string, Region>();
   private Dictionary<string, string> regionData = new Dictionary<string, string>();

   public MapForm()
   {
       InitializeComponent();
       LoadMapRegions();
   }

   private void LoadMapRegions()
   {
       // تعريف المناطق كمضلعات (مثال بسيط)
       regions["Cairo"] = new Region(new GraphicsPath(new Point[] {
           new Point(50, 50), new Point(150, 50), new Point(150, 150), new Point(50, 150)
       }, new byte[] { 0, 1, 1, 129 }));

       regions["Alexandria"] = new Region(new GraphicsPath(new Point[] {
           new Point(160, 50), new Point(260, 50), new Point(260, 150), new Point(160, 150)
       }, new byte[] { 0, 1, 1, 129 }));

       // بيانات كل منطقة
       regionData["Cairo"] = "Cairo: Population: 10M, Features: Capital of Egypt.";
       regionData["Alexandria"] = "Alexandria: Population: 5M, Features: Coastal City.";
   }

   private void MapForm_Paint(object sender, PaintEventArgs e)
   {
       Graphics g = e.Graphics;

       foreach (var region in regions)
       {
           g.FillRegion(Brushes.LightBlue, region.Value);
           g.DrawRegion(Pens.Black, region.Value);
       }
   }

   private void MapForm_MouseMove(object sender, MouseEventArgs e)
   {
       foreach (var region in regions)
       {
           if (region.Value.IsVisible(e.Location))
           {
               string data;
               if (regionData.TryGetValue(region.Key, out data))
               {
                   toolTip1.Show(data, this, e.Location, 2000);
               }
               break;
           }
       }
   }
}

ملاحظات:
  1. التقسيم الدقيق للخريطة:
    • استخدم أدوات خارجية (مثل برامج التصميم) لتحديد النقاط الدقيقة لكل منطقة.
    • احفظ البيانات في ملف خارجي (JSON أو XML) لتحميلها عند تشغيل التطبيق.
  2. تحسين التصميم:
    • أضف ألوانًا أو تأثيرات عند تمرير المؤشر على منطقة لتوضيح التفاعل.
    • استخدم مكتبات خارجية مثل GMap.NET إذا كنت بحاجة إلى خرائط أكثر تعقيدًا.
  3. التوسيع:
    • يمكن ربط البيانات بقواعد بيانات لعرض معلومات ديناميكية.
    • دعم التكبير والتصغير (Zoom In/Out) باستخدام مكتبات الرسومات مثل GDI+ أو WPF.
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [C#.NET] إذا قمت بتحديد نص عن طريق الماوس كيف يمكن تخزين الذي تم تحديده بمتغير String osama623 5 1,575 15-07-22, 02:57 PM
آخر رد: سعود
  يمكن تحويلها إلى C-Sharp شكرا جزيلا لك lion4 1 1,407 11-03-21, 08:51 PM
آخر رد: bidaya
  [SQL] مطلوب التعديل على هذاء الكود بحيث 1 يساوى دخول و 0 يساوى خروج safnnn 1 1,940 19-04-19, 10:40 AM
آخر رد: elgokr
  هل يمكن تشغيل مشروع معتمد على الاكسس بدون وجود الاوفيس abozeyd 4 3,180 24-01-19, 09:10 PM
آخر رد: new_programer
  كيف يمكن نسخ بيانات خلية في قريد فيو في نفس العمود solnaif1440 4 2,405 25-09-18, 10:44 AM
آخر رد: elgokr
  سؤال عن كيفية عرض حقول معينة في dataGridView1 علما اني الاستعلام يكون لجميع الحقول younass 2 1,906 29-07-18, 05:13 PM
آخر رد: younass
  [سؤال] كيف يمكن عمل جدول يحتوي علي صور saad mahyoub 2 2,102 08-05-18, 06:29 PM
آخر رد: saad mahyoub
  كيف يمكن توسيط القيم في ListBox fouadhdfouad 0 1,743 17-12-17, 03:28 PM
آخر رد: fouadhdfouad
  كيف يمكن استخراج القيم المتكررة والغير متكررة بين DataGridViews mmohamed 0 1,733 09-12-17, 12:47 AM
آخر رد: mmohamed
  [سؤال] كيف يمكن تشغيل البرنامج على حاسبة العميل بدون تنصيب فيجوال استوديو وادي العوضي 6 6,028 07-12-17, 12:31 AM
آخر رد: MoHaNaD_m

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم