সি # ব্যবহার করে পাঠ্যে একটি ট্যাব অক্ষর সন্নিবেশ করা হচ্ছে


283

আমি একটি অ্যাপ্লিকেশন যেখানে আমি বিভিন্ন মান ক্যাপচার এবং তাদের সঙ্গে একটি টেক্সট গড়ে তুলতে চাই না বিল্ডিং করছি: Name, Age, ইত্যাদি

আউটপুট একটি মধ্যে একটি সরল পাঠ্য হবে TextBox

আমি এই তথ্যগুলিকে ধরণেরভাবে হাজির columnsকরার চেষ্টা করছি, তাই tabএটিকে আরও স্পষ্ট করার জন্য আমি তাদের সাথে আলাদা করার চেষ্টা করছি ।

উদাহরণস্বরূপ, পরিবর্তে:

Ann 26
Sarah 29
Paul 45

আমি এটি হিসাবে এটি দেখাতে চাই:

অন ট্যাব 26 সারা ট্যাব 29 পল ট্যাব 45

insertআমার পাঠ্যটিতে ট্যাবগুলিতে কীভাবে কোনও পরামর্শ ?


সতর্কতার একটি শব্দ ..... যদি নামের ক্ষেত্রটির দৈর্ঘ্য খুব বেশি হয় তবে আপনি সেগুলি সারিবদ্ধ করতে পারবেন না। "আনান" কেবলমাত্র 3 টি চরিত্র। "জেরেমিয়া" 8 টি। "আন" এ যুক্ত একটি একক ট্যাব জেরেমিয়ার শেষের আগে ## উপস্থিত হতে পারে। আমি অক্ষরের সংখ্যা দ্বারা পার্সিংয়ের পরামর্শ দেব। স্থান দ্বারা "বিভক্ত", 12 টি অক্ষর না হওয়া পর্যন্ত প্রথম সদস্যের জন্য স্পেস যুক্ত করুন এবং তারপরে "26" যুক্ত করুন। আপনার যদি এমন কোনও নাম থাকে যা 12 এর চেয়ে বেশি দীর্ঘ হতে পারে তবে সামঞ্জস্য করুন
KeachyPeenReturns

আমি কেবল একটি সমাধান পোস্ট করার পরে কেচিপেইনরটার্নসের মন্তব্য পড়ি। তার মন্তব্যটি সঠিক তবে তার সমাধানটি অসম্পূর্ণ। সেরা উত্তরটি ইতিমধ্যে ভুল। এই প্রশ্নের জন্য দয়া করে আমার সমাধানটি পড়তে এবং স্থিতি (সেরা উত্তর) আপডেট করতে সময় নিন। সাধারণত, আমি এই ধরণের মন্তব্য পোস্ট করি না তবে প্রশ্নটি খুব পুরানো।
স্ক্লেবে

উত্তর:


460

\tআপনার স্ট্রিংগুলিতে অক্ষরটি ব্যবহার করার চেষ্টা করুন


445

হাজার তার সাথে ঠিক আছে \t। সি # এর জন্য পালানোর অক্ষরের সম্পূর্ণ তালিকা এখানে রয়েছে:

\' একক উদ্ধৃতি জন্য।

\" একটি ডাবল উদ্ধৃতি জন্য।

\\ একটি ব্যাকস্ল্যাশ জন্য।

\0 একটি নাল চরিত্রের জন্য।

\a একটি সতর্কতা চরিত্র জন্য।

\b একটি পিছনে স্থান জন্য।

\f একটি ফর্ম ফিড জন্য।

\n একটি নতুন লাইনের জন্য

\r একটি গাড়ী ফেরতের জন্য।

\t একটি অনুভূমিক ট্যাব জন্য।

\v একটি উল্লম্ব ট্যাব জন্য।

\uxxxxএকটি ইউনিকোড চরিত্রের হেক্স মান (যেমন \u0020)।

\xহিসাবে একই \u, তবে আপনার নেতৃস্থানীয় শূন্যগুলির প্রয়োজন নেই (উদাঃ \x20)।

\Uxxxxxxxx ইউনিকোড চরিত্রের হেক্স মানের জন্য (সারোগেটগুলি উত্পন্ন করার জন্য আর ফর্মের প্রয়োজন)।


8
আপনি এই তথ্য কোথায় পেলেন? আমি আমার রেফারেন্স জানতে চাই।
কুইহ্যামার

@ কিউইহ্যামার রোম জোন স্কিট নিজেই দেখেছেন, মনে হচ্ছে ... devblogs.microsoft.com/csharpfaq/…
লিওনার্ড এবি

74

এটি String.Formatযেমন ব্যবহার করতেও কার্যকর হতে পারে

String.Format("{0}\t{1}", FirstName,Count);

17
এটি সর্বোত্তম উত্তর কারণ কোডটি একটি লাইনারের চেয়ে দীর্ঘ এবং দীর্ঘ ব্যাখ্যা দিয়ে থাকে।
ফিল


2

এটা করতে বিভিন্ন উপায় আছে। সবচেয়ে সহজ \tআপনার পাঠ্য ব্যবহার করা হয়। তবে এটি সম্ভব যে \tকিছু পরিস্থিতিতে যেমন কাজ করে না যেমন PdfReportন্যুগেট প্যাকেজ।


4
যে ক্ষেত্রে \tকাজ হয় না সে ক্ষেত্রে কীভাবে একটি ট্যাব যুক্ত করবেন সে সম্পর্কে তথ্য যুক্ত করা কার্যকর হবে । ;)
জে স্কট এলেব্লিন

2

ব্যবহার করে Microsoft Winform controls, আপনার সমস্যাটি সঠিকভাবে সমাধান করা সামান্য কাজ ব্যতীত যা আমি নীচে ব্যাখ্যা করব তা অসম্ভব।

সমস্যা

সহজভাবে "\t"বা ব্যবহারের ক্ষেত্রে সমস্যাটি vbTabহ'ল যখন একাধিক টেক্সটবক্স প্রদর্শিত হয় এবং সমস্ত পাঠ্যবক্সের জন্য প্রান্তিককরণ অবশ্যই সম্মান করা উচিত, কেবলমাত্র "\t"বা vbTabসমাধানটি এমন কিছু প্রদর্শন করবে যা সর্বদা সঠিকভাবে সংযুক্ত থাকে না।

ভিবি.নেটে উদাহরণ:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    TextBox1.Text = "Bernard" + vbTab + "32"
    TextBox2.Text = "Luc" + vbTab + "47"
    TextBox3.Text = "François-Victor" + vbTab + "12"
End Sub

প্রদর্শিত হবে

এখানে চিত্র বর্ণনা লিখুন

যেমন আপনি দেখতে পাচ্ছেন, ageমানটি François-Victorডানে স্থানান্তরিত হয় এবং ageঅন্য দুটি টেক্সটবক্সের মানের সাথে সংযুক্ত থাকে না ।

সমাধান

এই সমস্যাটি সমাধান করার জন্য, আপনাকে SendMessage()নীচের চিত্রের মতো নির্দিষ্ট ব্যবহারকারী 32.dll এপিআই ফাংশন ব্যবহার করে ট্যাব অবস্থান নির্ধারণ করতে হবে ।

Public Class Form1

    Public Declare Function SendMessage _
        Lib "user32" Alias "SendMessageA" _
        ( ByVal hWnd As IntPtr _
        , ByVal wMsg As Integer _
        , ByVal wParam As Integer _
        , ByVal lParam() As Integer _
        ) As Integer

    Private Const EM_SETTABSTOPS As Integer = &HCB

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim tabs() As Integer = {4 * 25}

        TextBox1.Text = "Bernard" + vbTab + "32"
        SendMessage(TextBox1.Handle, EM_SETTABSTOPS, 1, tabs)
        TextBox2.Text = "Luc" + vbTab + "47"
        SendMessage(TextBox2.Handle, EM_SETTABSTOPS, 1, tabs)
        TextBox3.Text = "François-Victor" + vbTab + "12"
        SendMessage(TextBox3.Handle, EM_SETTABSTOPS, 1, tabs)
    End Sub

End Class

এবং নিম্নলিখিত ফর্ম প্রদর্শিত হবে

এখানে চিত্র বর্ণনা লিখুন

আপনি এখন দেখতে পাচ্ছেন, সমস্ত মান সঠিকভাবে সারিবদ্ধ :-)

মন্তব্য

Multilineটেক্সটবক্সের সম্পত্তি অবশ্যই সেট করতে হবে । যদি এই বৈশিষ্ট্যগুলি মিথ্যাতে সেট করা থাকে তবে ট্যাবটি পূর্বের মতো অবস্থিত।

AcceptsTabসম্পত্তি কীভাবে বরাদ্দ করা হয় তা গুরুত্বপূর্ণ নয় (আমি পরীক্ষা করেছি)।

এই প্রশ্নটি ইতিমধ্যে স্ট্যাকওভারফ্লোতে চিকিত্সা করা হয়েছে

সাবধানতা: ট্যাব পজিশনের জন্য মেসার ইউনিট চরিত্র নয় তবে এমন একটি কিছু যা চরিত্রের 1/4 বলে মনে হয়। এজন্য আমি দৈর্ঘ্যটি 4 দ্বারা গুণ করি।

সি # সমাধান

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(IntPtr h, int msg, int wParam, uint[] lParam);
        private const int EM_SETTABSTOPS = 0x00CB;
        private const char vbTab = '\t';

        public Form1()
        {
            InitializeComponent();

            var tabs = new uint[] { 25 * 4 };

            textBox1.Text = "Bernard" + vbTab + "32";
            SendMessage(textBox1.Handle, EM_SETTABSTOPS, 1, tabs);
            textBox2.Text = "Luc" + vbTab + "47";
            SendMessage(textBox2.Handle, EM_SETTABSTOPS, 1, tabs);
            textBox3.Text = "François-Victor" + vbTab + "12";
            SendMessage(textBox3.Handle, EM_SETTABSTOPS, 1, tabs);
        }
    }
}

1
string St = String.Format("{0,-20} {1,5:N1}\r", names[ctr], hours[ctr]);
richTextBox1.Text += St;

এটি ভালভাবে কাজ করে তবে আপনার অবশ্যই মনো-ফাঁক ফন্ট থাকতে হবে।


1

আক্ষরিক স্ট্রিং ব্যবহার করার সময় (@ "দিয়ে শুরু করুন) এটি আরও সহজ হতে পারে

char tab = '\u0009';
string A = "Apple";
string B = "Bob";
string myStr = String.Format(@"{0}:{1}{2}", A, tab, B);

ফলাফল হবে Apple:<tab>Bob


1

উপরোক্ত আনসারদের পাশাপাশি আপনি প্যাডলিফ্ট বা প্যাডরাইট ব্যবহার করতে পারেন:

string name = "John";
string surname = "Smith";

Console.WriteLine("Name:".PadRight(15)+"Surname:".PadRight(15));
Console.WriteLine( name.PadRight(15) + surname.PadRight(15));

এটি স্ট্রিংটি বাম বা ডানদিকে শূন্যস্থান পূরণ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.