2012-01-06 30 views
13

Tôi đang sử dụng mã sau đây để hiển thị thời gian đã trôi qua của một tác vụ trong thanh trạng thái trong ứng dụng của tôi.Giá trị String.format() trong nhãn trạng thái hiển thị khác nhau trên Win 7 và Win XP

public void DisplayDuration(TimeSpan duration) 
{ 
    string formattedDuration; 

    if (duration.TotalMilliseconds < 2000) 
     formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds); 
    else if (duration.TotalSeconds < 60) 
     formattedDuration = string.Format("{0} sec", duration.TotalSeconds); 
    else 
     formattedDuration = string.Format("{0} min", duration.TotalMinutes); 

    this.TimingLabel.Text = formattedDuration; 
} 

this.TimingLabel là nhãn trong điều khiển statusStrip ở chân của biểu tượng thắng.

Nhưng tôi nhận được kết quả hoàn toàn khác nhau trên Windows XP vs Windows 7

Windows XP: elapsed Time formatted XP

của Windows 7 elapsed Time formatted 7

Tại sao các đơn vị xuất hiện trước thời điểm trong Windows 7?

Tôi đã kiểm tra Cài đặt vùng cả hai máy được đặt thành Hoa Kỳ có cùng định dạng Ngày giờ. Làm cho khá chắc chắn nó là cùng một mã chạy trên cả hai máy. Đây là hành vi rất kỳ quặc trong một số mã rất đơn giản.

Là một theo dõi: Tôi thực hiện thay đổi sau để mã của tôi nhưng vẫn có cùng một vấn đề:

formattedDuration = string.Format("{0} ms", duration.TotalMilliseconds.ToString()); 
+0

Bạn có chắc chắn mã giống nhau đang chạy trên cả hai hệ điều hành không? – FishBasketGordo

+0

Cài đặt bổ sung cho "Số" được đặt cho "Số chữ số sau dấu thập phân" cho mỗi hệ thống là gì? – Oded

+0

Im sẽ đi ra ngoài trên một chi ở đây và đoán rằng bạn không hiển thị cho chúng tôi tất cả mã liên quan đến việc gán văn bản cho 'TimingLabel'. – Jamiec

Trả lời

7

Tôi nghĩ rằng khả năng có lẽ ở đây hầu hết là một vấn đề bố trí và không String.Format. Cài đặt vùng không phải là yếu tố ở đây vì bạn không yêu cầu TimeSpan định dạng giá trị của nó. Thay vào đó, bạn yêu cầu String để định dạng chuỗi "ms", theo sau là số. Nó sẽ chỉ đơn giản là một lỗi nếu nó đảo ngược chúng trong đầu ra.

Khả năng nhiều hơn là số bị cắt bớt thông qua lỗi trong ràng buộc bố cục của vùng chứa. Nếu tôi nhìn rất kỹ vào ảnh chụp màn hình, có vẻ như đó là dải phân cách ngay bên trái của chuỗi ms.

Thử cung cấp mọi thứ với chiều rộng cố định khá rộng và xem màn hình chính xác có quay trở lại hay không.

+0

Đề xuất tốt. –

+1

Đó là lỗi bố cục. Khi tôi làm cho các nhãn cố định chiều rộng, giá trị được định dạng chính xác. –

+0

@Gary: Bạn sẽ không thể chỉnh sửa tiêu đề câu hỏi của mình được không? – GaussZ

0

Câu trả lời thực tế là nhãn trong trạng thái có RightToLeft được đặt không chính xác thành đúng. Thuộc tính này không được Windows XP tôn trọng nhưng được sử dụng Windows 7+.

Các vấn đề liên quan